[英]Java abstract class constructor
我想知道這里發生了什么:
我有抽象的超類
public abstract class Superclass {
public Superclass()
{
doSth();
}
public abstract void doSth();
}
和子類
public class Subclass extends Superclass{
private int x = 10;
public void doSth()
{
System.out.println("Value x="+this.x);
}
}
當我做
Subclass x= new Subclass();
x.doSth();
我明白了:
Value x=0
Value x=10
我不知道為什么首先得到x = 0(為什么從一開始x = 10?)然后x = 10?
超類的構造函數在子類的isntance初始化表達式之前執行,這就是為什么x
在第一次調用doSth()
仍然具有默認值0的doSth()
。 第二個調用x.doSth()
在Subclass
實例完全初始化之后發生,因此x
包含10
。
更多細節 :
當你調用Subclass
的constrcutor時,首先它調用Superclass
的構造函數,它調用Object
的構造函數。 然后執行Superclass
構造函數的主體,因此執行doSth()
。 只有在Superclass
構造函數完成之后, Subclass
的實例初始化表達式(在您的情況下,賦值x = 10;
才會被計算。在計算它們之前, x
仍然包含默認值 - 0,這是您看到的打印值第一次調用doSth()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.