当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类定义这些属性和方法,子类通过关键字 extends 来声明继承父类即可
class Son extends Father{
}
好处
提高了代码的复用性
提高了代码的扩展性和可维护性
细节1.父类的私有(private)属性和方法不能在子类直接访问,要通过公共的方法去访问
private String name; //父类定义一个私有属性姓名
public String getName() {
return name; //定义一个访问 name 的公共方法
}
a.getName(); //子类要通过调用公共方法才能访问 name
2.当创建子类对象,不论子类用的哪个构造器,默认情况下先调用父类的无参构造器,完成父类的初始化
public Son() {
super(); //默认存在super关键字调用父类的无参构造器
sout("这是子类的无参构造器")
}
public Father() {
sout("这是父类的无参构造器")
}
Son son = new Son(); //当创建一个子类对象,会默认调用父类和子类的构造器方法
3.如果父类没有无参构造器,要在子类构造器中用 ==super();==去指定使用父类的哪个带参构造器完成对父类的初始化工作,不然会报错
public Son(String name) {
super("zcw");
//由于父类没有无参构造器,子类用super指定父类带参的构造器,即传入对应实参
①sout("这是子类的带参构造器")
}
public Father(String name) {
②sout("这是父类的带参构造器")
}
Son son = new Son(name); //当创建一个子类对象,会默认调用父类和子类的构造器方法
输出结果则是①②
- super只能在构造器使用,且必须放在构造器的第一行,不然会报错,先有爸,再有儿子
- super() 和 this() 都只能放在构造器的第一行,两个方法不能放在同一个构造器(好好理解)
- java所有类都是Object的子类
- 父类构造器的调用不限于直接父类,一直往上追溯到object类
- 子类最多只能继承一个父类,java是单继承机制
- 不能滥用继承,子类和父类必须满足 is-a 的关系



