Skip to content

Java类要点

1. 重写和重载

1.1 重写

子类可以继承父类的方法,如果想做修改就需要重写。
重写的方法具有和父类方法相同的方法名、返回类型和参数。
如需要在重写方法里面调用父类方法,可以使用super关键字引用父类方法。

1.2 重载

方法重载可以让类具有使用统一的方法处理不同类型数据的能力。
方法重载具有相同的方法名,不同的方法参数包括个数类型,返回类型也可以不同。

2. 接口和抽象类

2.1 不同点

  1. 定义方式不同:
    接口使用interface关键字定义,接口中的方法默认是public abstract的,变量默认是public static final的。
    抽象类使用abstract关键字定义,抽象类中可以有抽象方法(使用abstract关键字修饰且没有方法体),也可以有非抽象方法。
  2. 实现方式不同:
    一个类可以实现多个接口,使用implements关键字。
    一个类只能继承一个抽象类,使用extends关键字。
  3. 方法体不同:
    接口中的方法不能有方法体(Java8之后可以有默认方法和静态方法有方法体,但这是特殊情况)。
    抽象类中的抽象方法没有方法体,但非抽象方法有方法体。
  4. 构造函数不同:
    接口没有构造函数。
    抽象类可以有构造函数,用于初始化类的成员变量。

2.2 相同点

  1. 接口和抽象类都不能直接实例化。
  2. 你可以通过子类实现接口或继承抽象类,从而获取其定义的抽象方法。
  3. 抽象类和接口都可以用于实现多态,子类可以通过父类或接口的引用来调用实现的方法。

2.3 使用场景

  1. 使用接口的场景
  • 当需要定义一组相关的方法规范,并且这些方法不依赖于特定的实现类时,使用接口。例如,定义一个Comparable接口,用于定义对象的比较方法,不同的类可以根据自身的逻辑实现这个接口。
  • 用于实现多态性,一个类可以实现多个接口,从而表现出多种行为。例如,一个类可以实现Serializable接口用于对象序列化,同时实现Cloneable接口用于对象克隆。
  • 当你需要支持多重继承时。
  • 当你只关心某个能力(像行为或功能)时。
  1. 使用抽象类的场景
  • 当你有一些共有通用的状态(成员变量)或行为(方法),并且希望使用共享的实现。
  • 当你希望为子类提供一些默认行为实现或基础功能时,又允许子类重写这些行为。

3. 访问标识符

3.1 public关键字

允许类、方法或变量被任何地方的代码访问,无论它们位于哪个包中。这是最宽松的访问控制修饰符,具有最高级别的可见性。例如,一个public类可以被任何其他类访问,无论该类是否与public类位于同一个包中‌

3.2 ‌private关键字

限制类中的成员变量和方法的访问范围,使其只能在其所在类的内部访问,而不能在其他类中访问。这有助于保护类的内部实现细节,防止其他类直接访问和修改类的成员变量和方法,从而增强代码的安全性和稳定性‌

3.3 protected关键字

限制类中的成员变量和方法的访问范围,使其可以被同一包中的其他类访问,也可以被不同包中的子类访问。这提供了一种在包内和包间继承中保护成员的方式,同时允许子类访问父类的受保护成员‌