2016-12-14 96 views
1

每次在java中調用構造函數時都創建對象嗎? 這裏的Apple類是從Fruit.Apple對象繼承而來的。當它繼承自Fruits時,Fruit的構造函數被調用(構造函數鏈)。這意味着Fruit的對象已經被初始化。每次在java中調用構造函數時是否創建對象?

但輸出表明只有1個對象被創建,Apple對象。兩者都具有相同的哈希碼。

有人可以解釋一下嗎?.I預計有2個對象在那裏。第一個Fruit對象應該已經被初始化,然後是Apple對象。

// Java程序來證明這兩個超類 //和子類的構造函數是指同一個對象

// super class 
class Fruit 
{ 
    public Fruit() 
    { 
     System.out.println("Super class constructor"); 
     System.out.println("Super class object hashcode :" + 
          this.hashCode()); 
     System.out.println(this.getClass().getName()); 
    } 
} 

// sub class 
class Apple extends Fruit 
{ 
    public Apple() 
    { 
     System.out.println("Subclass constructor invoked"); 
     System.out.println("Sub class object hashcode :" + 
          this.hashCode()); 
     System.out.println(this.hashCode() + " " + 
          super.hashCode()); 

     System.out.println(this.getClass().getName() + " " + 
          super.getClass().getName()); 
    } 
} 

// driver class 
public class Test 
{ 
    public static void main(String[] args) 
    { 
     Apple myApple = new Apple(); 
    } 
} 

Output 
Super class constructor 
Super class object hashcode :366712642 
Apple 
Subclass constructor invoked 
Sub class object hashcode :366712642 
366712642 366712642 
Apple Apple 
+1

[Java中的繼承 - 創建子類的對象也會調用超類的構造函數。爲什麼?](http://stackoverflow.com/questions/488727/inheritance-in-java-creating-an-object-of-the-subclass-invokes-also-the-constr) – DVarga

回答

1

構造函數調用不創建一個新的對象,它初始化一個新創建的對象。

當您使用new Apple()創建Apple對象時,會創建一個對象。該對象屬性的初始化涉及執行多個構造函數(Apple,FruitObject)。

0

對象的構造函數用於指定對象在創建時需要的任何細節,如設置一些變量。

當你使用新的Apple()時,將創建對象並初始化構造函數中的代碼。

相關問題