继承关系下构造方法的访问特点

首先了解什么是继承:共性抽取,提高代码的复用性。通俗来讲就是孩子继承父亲的基因,但又和父亲不完全一样,在相同的基础上又有不同。体现在在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、创建子类对象的时候一定会调用到父类的构造方法,不显示的写,则调用的是无参数的;显示的写,写的哪个调用哪个。

猜你喜欢

转载自blog.csdn.net/m0_48011056/article/details/125475440