Java类要点
1. 重写和重载
1.1 重写
子类可以继承父类的方法,如果想做修改就需要重写。
重写的方法具有和父类方法相同的方法名、返回类型和参数。
如需要在重写方法里面调用父类方法,可以使用super关键字引用父类方法。
1.2 重载
方法重载可以让类具有使用统一的方法处理不同类型数据的能力。
方法重载具有相同的方法名,不同的方法参数包括个数类型,返回类型也可以不同。
2. 接口和抽象类
2.1 不同点
- 定义方式不同:
接口使用interface
关键字定义,接口中的方法默认是public abstract
的,变量默认是public static final
的。
抽象类使用abstract
关键字定义,抽象类中可以有抽象方法(使用abstract关键字修饰且没有方法体),也可以有非抽象方法。 - 实现方式不同:
一个类可以实现多个接口,使用implements关键字。
一个类只能继承一个抽象类,使用extends关键字。 - 方法体不同:
接口中的方法不能有方法体(Java8之后可以有默认方法和静态方法有方法体,但这是特殊情况)。
抽象类中的抽象方法没有方法体,但非抽象方法有方法体。 - 构造函数不同:
接口没有构造函数。
抽象类可以有构造函数,用于初始化类的成员变量。
2.2 相同点
- 接口和抽象类都不能直接实例化。
- 你可以通过子类实现接口或继承抽象类,从而获取其定义的抽象方法。
- 抽象类和接口都可以用于实现多态,子类可以通过父类或接口的引用来调用实现的方法。
2.3 使用场景
- 使用接口的场景
- 当需要定义一组相关的方法规范,并且这些方法不依赖于特定的实现类时,使用接口。例如,定义一个Comparable接口,用于定义对象的比较方法,不同的类可以根据自身的逻辑实现这个接口。
- 用于实现多态性,一个类可以实现多个接口,从而表现出多种行为。例如,一个类可以实现Serializable接口用于对象序列化,同时实现Cloneable接口用于对象克隆。
- 当你需要支持多重继承时。
- 当你只关心某个能力(像行为或功能)时。
- 使用抽象类的场景
- 当你有一些共有通用的状态(成员变量)或行为(方法),并且希望使用共享的实现。
- 当你希望为子类提供一些默认行为实现或基础功能时,又允许子类重写这些行为。
3. 访问标识符
3.1 public关键字
允许类、方法或变量被任何地方的代码访问,无论它们位于哪个包中。这是最宽松的访问控制修饰符,具有最高级别的可见性。例如,一个public类可以被任何其他类访问,无论该类是否与public类位于同一个包中
3.2 private关键字
限制类中的成员变量和方法的访问范围,使其只能在其所在类的内部访问,而不能在其他类中访问。这有助于保护类的内部实现细节,防止其他类直接访问和修改类的成员变量和方法,从而增强代码的安全性和稳定性
3.3 protected关键字
限制类中的成员变量和方法的访问范围,使其可以被同一包中的其他类访问,也可以被不同包中的子类访问。这提供了一种在包内和包间继承中保护成员的方式,同时允许子类访问父类的受保护成员