Java类要点
1. 重写和重载
1.1 重写
子类可以继承父类的方法,如果想做修改就需要重写。
重写的方法具有和父类方法相同的方法名、返回类型和参数。
如需要在重写方法里面调用父类方法,可以使用super关键字引用父类方法。
1.2 重载
方法重载可以让类具有使用统一的方法处理不同类型数据的能力。
方法重载具有相同的方法名,不同的方法参数包括个数类型,返回类型也可以不同。
2. 接口和抽象类
2.1 不同点
- 类可以实现很多接口,但是只能继承一个抽象类。
- 在JDK8之前接口中全是抽象方法,JDK8之后允许包含
static
和default
实现方法。抽象类是一直允许包含抽象和非抽象方法。 - 接口中的声明变量默认都是final修饰的,抽象类中是可以包含非final的变量。
- 接口主要用于定义某些行为或功能的契约。抽象类用于共享代码和提供基本实现,适用于具有共同特征的类。
- 接口不能有构造方法。抽象类可以有构造方法,允许子类通过父类构造函数进行初始化。
2.2 相同点
- 接口和抽象类都不能直接实例化。
- 你可以通过子类实现接口或继承抽象类,从而获取其定义的抽象方法。
- 抽象类和接口都可以用于实现多态,子类可以通过父类或接口的引用来调用实现的方法。
2.3 使用场景
- 使用接口的场景
- 当你希望定义一个标准,可能有多个实现并且实现之间没有强依赖的行为。
- 当你需要支持多重继承时。
- 当你只关心某个能力(像行为或功能)时。
- 使用抽象类的场景
- 当你有一些共有的状态(成员变量)或行为(方法),并且希望使用共享的实现。
- 当你希望为子类提供一些默认实现或基础功能时。
- 当你允许子类继承时不需要过多的灵活性。