继承的由来
多个类中存在相同属性和行为时,我们每个类都编写一遍会造成代码的冗余。为了解决这种问题,继承的就应运而生了。
继承的概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成某种关系。如图所示:
public class Student extends Person{ private int score; public Student(String name, int age) { super(name, age); } public Student(String name, int age, int score) { super(name, age); this.score = score; } //其他成员方法省略 }
结论:
子类对象实例化过程中必须先完成从父类继承的成员变量的实例初始化,这个过程是通过调用父类的实例初始化方法来完成的。
- super( ):表示调用父类的无参实例初始化方法,要求父类必须有无参构造,而且可以省略不写;
- super(实参列表):表示调用父类的有参实例初始化方法,当父类没有无参构造时,子类的构造器首行必须写super(实参列表)来明确调用父类的哪个有参构造(其实是调用该构造器对应的实例初始方法)
- super( )和super(实参列表)都只能出现在子类构造器的首行
- 实际开发中,强烈建议自己定义有参数和无参构造。
继承后成员的访问规则
访问私有成员变量的规则
- 父类中的成员,无论是公有(public)还是私有(private),均会被子类继承。
- 子类虽会继承父类私有(private)的成员变量,但子类不能对继承的私有成员直接进行访问,可通过继承的get/set方法进行访问。
如图所示: