您的位置:首页 > 编程语言 > Java开发

java继承2-构造函数详细

2015-10-27 17:12 441 查看
1. 继承中构造函数的调用顺序

先调用父类构造,再调用子类构造

原因: 必须要先给父类分配空间,这样子类才可以继承

注意事项:

a.对于父类的变量,子类继承,但是是有自己的空间

b.静态变量不继承,是存在于Java虚拟机分配的数据空间里

c.构造函数也不继承

2.关于super关键字

当父类拥有无参构造时,子类的构造函数可以不写什么,默认调用;

当然也可以通过super()调用。

e.g:

package com.xiyou.weijie.chap5;

public class Base {
protected int a;

public Base() {
System.out.println("Base无参构造");
}
<span style="font-size:18px;"></span><pre name="code" class="java">        public Base(int a) {
this.a = a;
System.out.println("Base有参构造");
}
}


package com.xiyou.weijie.chap5;

public class Child extends Base{

    private int b;
    public Child()
    {
        /*
         * 这里不写任何语句,但是会隐形的调用父类的无参构造
* super();这样是显性调用
         */
        System.out.println("Child无参构造");
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        
        Child c=new Child();
    }

}


如果父类只有有参构造函数,子类必须显性super(实参表)写构造函数

e.g:

package com.xiyou.weijie.chap5;

public class Base {
protected int a;

public Base(int a) {
this.a = a;
System.out.println("Base有参构造");
}

}


package com.xiyou.weijie.chap5;

public class Child extends Base{

private int b;
public Child()
{
super(14);//如果这里不写,报错
System.out.println("Child无参构造");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根

Child c=new Child();
}

}


3.super关键字其他使用

a.调用父类同名被隐藏的成员变量

方式: super.变量名

b.调用父类同名被覆盖的成员方法

方式:super.方法名()

e.g:

package com.xiyou.weijie.chap5;

public class Base {
protected int a;

public Base(int a) {
this.a = a;
System.out.println("Base有参构造");
}

public void showBase()
{
System.out.println("Base.showBase()");
}
}


package com.xiyou.weijie.chap5;

public class Child extends Base{

private int a;
public Child(int a)
{
super(14);//如果这里不写,报错
this.a=a;
System.out.println("Child无参构造");
}
public void showBase()
{
System.out.println("super.a:"+super.a);
}
public void showChild()
{
System.out.println("a:"+a);
}

public void show()
{
super.showBase();
}
public static void main(String[] args) {
// TODO 自动生成的方法存根

Child c=new Child(10);
c.showBase();
c.showChild();
c.show();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: