我只知道super是调用父类构造函数和所指父类对象的,我估计是super不是这样用的,因为下面的程序只有一个输出结果class A{
int x;
public A(){
this.print() ;
}
public void print(){
System.out.println("x="+x);
}
}
class B extends A{
private int x = 100 ;
public B(int x){
super();//这里我不super()调用父类无参构造函数了吗?无参构造函数里面不有print()方法吗?
this.x = x ; //那为什么结果只有一个输出???代码没有错误!
}
/* public void print(){
System.out.println("x = " + x) ;
}*/
}
public class TestJava01{
public static void main(String args[]){
A a = new B(10) ;
}
}
int x;
public A(){
this.print() ;
}
public void print(){
System.out.println("x="+x);
}
}
class B extends A{
private int x = 100 ;
public B(int x){
super();//这里我不super()调用父类无参构造函数了吗?无参构造函数里面不有print()方法吗?
this.x = x ; //那为什么结果只有一个输出???代码没有错误!
}
/* public void print(){
System.out.println("x = " + x) ;
}*/
}
public class TestJava01{
public static void main(String args[]){
A a = new B(10) ;
}
}
所以有输出写了super是你自己手动调用的父类构造函数
系统就不会再自动调用父类的构造函数了
确实是啊,我的意思是我用super()调用了父类的构造函数,父类构造函数中有一个print()方法,为什么子类构造函数没有执行print()方法,就是没有输出???
既然你子类调用了调用父类的无参构造函数,父类构造函数中有输出X的方法,那么子类为什么没有输出X的结果????????????
public B2(int x) {
super();
this.x = x;
this.print();//要不重写父类的方法,要不继承调用父类的方法。
}
public void print() {
System.out.println("x = " + x); }
因为你的子类构造函数里没有调用 print() 方法.
在执行 A a = new B(10) 这条语句的时候,会做这样一些事:
1.调用 B 的构造函数 进入方法 B(int x).
2.执行 B(int x) 里的 super() 语句,会去调用 A 类的构造函数 A(), 此时会调用 print() 方法一次。
3.print() 结束后,再回到 B 的构造方法,继续执行下一条语句:this.x = x 。
4.类 B 的一个实例构造完成。
5.把类 B 的实例的引用 返回给类 A 的引用 a。整个过程只调用了一次 print() 方法,所以只有一次输出。