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();
}
}