java中的继承 (extends) 详解

深坑double

继承(extends)

缺点

父类的方法全部暴露给了子类,如果父类发生变化,子类也要跟着发生变化

概念

继承是一种类与类之间的关系,使用已存在的类作为基础建立新类,在新类上可以增加新的成员变量或新的方法,也可以用父类的功能,但不能选择性地继承父类,在 java 中使用 extends 实现继承。

关于 super

在子类的构造过程中必须调用其父类的构造方法,如果子类构造方法中没有显示标注,而父类又没有无参的构造方法则编译出错,在使用 super 调用父类指定构造方法时,必须在子类构造方法的第一行。

方法重载

语法规则:

  • 必须在同一类中,且方法名相同
  • 参数列表可以不同,如(参数顺序,个数、类型)
  • 方法返回值以及访问修饰符可以任意
  • 与方法的参数名无关

方法重写

语法规则:

  • 必须在有继承关系的子类中进行
  • 返回值类型、方法名、参数(类型,顺序,个数)都要与父类继承的方法相同
  • 对于访问修饰符,访问的范围需要大于或等于父类的访问范围

访问修饰符

  • private: 只允许在本类中进行访问
  • public: 允许在任意位置访问
  • protected: 允许在当前类、同包子类/非子类、跨包子类调用,跨包非子类不允许
  • 默认: 允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
访问修饰符 本类 同包 子类 其他
private - - -
默认 - -
protected -
public

继承的初始化顺序

父类的静态代码块 > 子类的静态代码块 > 父类的构造代码块 > 父类的无参构造方法 > 子类的构造代码块 > 子类的无参构造方法

访问修饰符不影响成员加载顺序,只会跟书写位置有关。

参考文章