继承中的构造方法

来源:互联网 发布:freeboard软件 编辑:程序博客网 时间:2024/06/06 21:02

一、Super关键字、this关键字

    在Java类中使用this表示当前对象,使用Super来引用基类的成分。如果子类继承超类,当我们new这个子类对象时,子类对象里面会有一个父类对象,那么怎么引用里面的父类对象呢?


举个栗子:                                   

                                   

在父类对象中,有一个成员变量value,初始值为0,在子类对象中又有自己的value,初始值也为0,                                                 

                 

我们知道,当new一个对象出来时,会有一个this引用,指向自身。因为这个对象是子类对象,所以还有一个Super引用,指向父类。                                           

至此,ChildClass  cc = new ChildClass()执行完毕。

    当执行到cc.f() 时,首先会调用Super.f,父类对象的value,变成100,打印“FatherClass.value=100” ,当执行到value=200,子类对象的value变成200。

    最终的打印结果为:

FatherClass.value = 100

ChildClass.value = 200

200

100


二、继承中的构造方法规则:

1、子类的构造过程中必须调用其基类的构造方法。

2、子类可以在自己的构造方法中使用super(argument_list(参数列表))调用基类的构造方法。

   1)使用this(argument_list)调用本类自身的构造方法。

   2)如果调用super,必须写在子类构造方法的第一行。

3、如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。

4、如果子类构造方法中没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错


举个例子:

class SuperClass{    private int n;          //声明成员变量n        SuperClass(){            //构造方法一       System.out.println("SuperClass()");     }           SuperClass(int n){      //构造方法二       System.out.println("SuperClass(" + n + ")");       this.n =n;      }}class SubClass extends SuperClass{      private int n;      SubClass(int n){        //构造方法三          System.out.println("SubClass(" + n + ")");          this.n = n;       }          SubClass(){           //构造方法四         super(300);         System.out.println("SubClass()");      }      }public class TestSuperSub{       public static void main(String args[]){           SubClass sc1 = new SubClass();           SubClass sc2 = new SubClass(400);       }}


    客户端中, 先把构造方法一和super(300)和SubClass sc2 = new SubClass(400)注释掉,SubClass sc1 = new SubClass()调用了构造方法四,构造方法四需要在父类中找没有参数的构造方法,而此时父类中没有没有参数的构造方法。(与在子类的构造方法中必须调用父类的构造方法违背)所以编译出错。当没有显示调用时,调用父类中没有参数的构造方法。












0 0
原创粉丝点击