Skip to content

Latest commit

 

History

History
57 lines (50 loc) · 3.55 KB

继承.md

File metadata and controls

57 lines (50 loc) · 3.55 KB

访问修饰符

  • private
  • protected
  • default
  • public
访问权限 本类 本包的类 子类 非子类的外包类
public
protected
default
private

抽象类与接口

抽象类

  • 抽象类和抽象方法都使用 abstract 关键字进行声明。如果一个类中包含抽象方法,那么这个类必须声明为抽象类。
  • 抽象类和普通类最大的区别是,抽象类不能被实例化,需要继承抽象类才能实例化其子类。

接口

  • 接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。
  • 从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。
  • 接口的成员(字段 + 方法)默认都是 public 的,并且不允许定义为 private 或者 protected。
  • 接口的字段默认都是 static 和 final 的。

super

  • 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。
  • 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

重写与重载

重写(Override)

存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法

  • 子类方法的访问权限必须大于等于父类方法;
  • 子类方法的返回类型必须是父类方法返回类型或为其子类型。
  • 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型

重载(Overload)

  • 存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。
  • 应该注意的是,返回值不同,其它都相同不算是重载。

多态的实现与原理

多态指同一个行为具有不同的表现形式。java多态主要体现在两个方面:重写和重载。 重载时,调用相同的方法名,但可以根据参数的不同,对应不同的方法行为。 重写时,子类继承父类方法,并重写,通过父类引用指向子类对象,调用相同的方法名时,也可产生不同的行为。

多态允许具体访问时实现方法的动态绑定。Java对于动态绑定的实现主要依赖于方法表,通过继承和接口的多态实现有所不同

  • 继承
    • 在执行某个方法时,在方法区中找到该类的方法表,再确认该方法在方法表中的偏移量,找到该方法后如果被重写则直接调用,否则认为没有重写父类该方法,这时会按照继承关系搜索父类的方法表中该偏移量对应的方法
  • 接口
    • Java 允许一个类实现多个接口,从某种意义上来说相当于多继承,这样同一个接口的的方法在不同类方法表中的位置就可能不一样了。所以不能通过偏移量的方法,而是通过搜索完整的方法表

参考文章