菜鸟遇到一个优点混乱的问题——java继承中的构造方法

學游泳的魚 2013-11-30 02:00:11
class SuperClass{
private int n;

SuperClass(){
print("SuperClass().");
}
SuperClass(int n){
print("SuperClass("+n+").");
this.n=n;
}
}

class SubClass extends SuperClass{
private int n;

SubClass(){
this(100);
//super(100);
print("SubClass().");

}

SubClass(int n){

print("SubClass("+n+").");
this.n=n;
}
}
public class TestSuperSub {
public static void main(String[] args) {
SubClass sub=new SubClass();
}

}


为什么在用SubClass()方法中的this(100)调用SubClass(int n)构造器的时候,程序不再调用SuperClass中的SuperClass(){print("SuperClass().");}? 不是每次调用子类构造器的时候,都会调用父类的构造器吗?
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
學游泳的魚 2013-11-30
  • 打赏
  • 举报
回复
引用 1 楼 waynexuan 的回复:
肯定会调用SuperClass()构造器,楼主看错了吧? 另外,应该是System.out.print(),直接print()肯定不行
我在前面还引用了一个输出的类里面有个print()方法,所以直接写print()
學游泳的魚 2013-11-30
  • 打赏
  • 举报
回复
引用 楼主 liyzero 的回复:
class SuperClass{
	private int n;
	
	SuperClass(){
		print("SuperClass().");
	}
	SuperClass(int n){
		print("SuperClass("+n+").");
		this.n=n;
	}
}

class SubClass extends SuperClass{
	private int n;
	
	SubClass(){
		this(100);
		//super(100);
		print("SubClass().");
		
	}
	
	SubClass(int n){

		print("SubClass("+n+").");
		this.n=n;
	}
}
public class TestSuperSub {
	public static void main(String[] args) {
		SubClass sub=new SubClass();
	}

}
为什么在用SubClass()方法中的this(100)调用SubClass(int n)构造器的时候,程序不再调用SuperClass中的SuperClass(){print("SuperClass().");}? 不是每次调用子类构造器的时候,都会调用父类的构造器吗?
我在前面还引用了一个输出的类里面有个print()方法,所以直接写print()。
學游泳的魚 2013-11-30
  • 打赏
  • 举报
回复
昨晚学习的时候有点混淆,现在理解清楚了。 多谢各位
cczbbwish 2013-11-30
  • 打赏
  • 举报
回复
①创建一个对象,只会调用一个构造器来初始化对象,假如可以调用多个构造器,会乱套的; ②“不是每次调用子类构造器的时候,都会调用父类的构造器吗?”SuperClass(int n),难道就不属于父类的构造器了?
七伤拳 2013-11-30
  • 打赏
  • 举报
回复
SuperClass(). SubClass(100). SubClass(). 这是正确的调用结果.
WayneXuan 2013-11-30
  • 打赏
  • 举报
回复
肯定会调用SuperClass()构造器,楼主看错了吧? 另外,应该是System.out.print(),直接print()肯定不行

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧