首先了解什么是继承:共性抽取,提高代码的复用性。通俗来讲就是孩子继承父亲的基因,但又和父亲不完全一样,在相同的基础上又有不同。体现在在Java中就是一个类继承另外一个类。
基本语法:
public class 子类 extends 父类{
//创建子类对象后,通过子类对象可以直接访问父类非private修饰的成员信息
}
那么在继承关系下构造方法的访问特点分为以下几点内容:
1、赠送默认构造方法
(1)如果一个类中没有显示的写一个构造方法,则默认赠送一个无参数的构造方法,如果显示的写了,则不再赠送。
(2)子类的构造方法中如果没有显示的super(参数)写,则默认赠送一个super();
(3)如果显示的写了有参的构造方法super(参数),则不再赠送。
2、super、this的用法
(1)super.父类成员变量
(2)super.父类成员方法()
(3)super(参数) //在子类的构造方法中
3、this关键字的三种用法:
(1)this.本类成员变量;
(2) this.本类成员方法();
(3) this(参数);//调用本类的其他构造方法,不能调用自己(递归)
其中第三点比较容易被忽略,如下代码
public class Fu{
protected int a;
protected String b;
public Fu(int a,String b) { //父类有参的构造方法
this.a = a;
this.b = b;
}
public Fu() { //父类无参的构造方法
System.out.println("123");
}
}
public class Zi extends Fu{
public Zi() {
//super(); //调用父类的无参数的构造方法
this(100,"xxx"); //调用本类的有参构造方法
//this(); //不能调用自己,错误写法
}
public Zi(int a,String b) {
super(a,b); //显示的调用父类的有参数的构造方法
}
public void test() {
//this();//错误写法
}
}
注意:
(1)this()写在构造方法或成员方法中就是递归调用;并且this(参数)只可以调用本类的其他构造方法,不能递归调用自己。
(2)this()和super()不能同时出现在一个方法中。因为一个对象不能被反复初始化,所以注定两者不能同时出现在同一个构造方法中。显示的写了this(),则不再默认赠送super()。
(3)this()或 super()出现的位置只能是构造方法的第一行,这两个操作执行的都是初始化,为了保证初始化的顺序,就得放在构造方法的第一行,当第一行没有写super()语句时,编译器会自动在构造方法的第一行加上无参super()语句。
4、创建子类对象的时候一定会调用到父类的构造方法,不显示的写,则调用的是无参数的;显示的写,写的哪个调用哪个。