簡體   English   中英

Java抽象類構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM