2016-04-26 181 views
2

在超類的構造函數之外初始化的私有變量是否應該在子類中正確繼承?Java:超類中私有變量的初始化

例如,在下面的代碼中,私有實例變量x是否會在子類中正確繼承?我知道x和y只能在Rectangle中定義的2個公共getter才能在Square子類中訪問。但是,如果x在構造函數之外初始化,子類是否仍能成功繼承x?

public class Rectangle 
{ 
    private int x = 0; 
    private int y; 
    protected double height; 
    protected double length; 

    public Rectangle(double length, double height) 
    { 
     this.height = height; 
     this.length = length; 
     y = 0; 
    } 

    public int getx() 
    { 
     return x; 
    } 

    public int gety() 
    { 
     return y; 
    } 
} 


public class Square extends Rectangle 
{ 
    public Square(double side) 
    { 
     super(side, side); 
    } 
} 
+1

是的。沒問題。 – Gendarme

+0

私人成員根本沒有繼承。然而,它們按照程序文本初始化。 – EJP

回答

1

是的,它繼承沒有問題。如果在構造函數中沒有賦值,那麼最終會得到默認值,因爲它是實例成員。

Object的默認值爲null,並且每個基元都有其默認值。

+0

你的意思是說,因爲我給構造函數外的私有變量x賦值,賦值不會被繼承,但默認值會被繼承嗎?說如果我將'private int x = 0'這一行更改爲'private int x = 1',我會得到x值作爲子類中默認的0或1嗎?謝謝。 –

+0

你會得到1 :)因爲它是實例成員並被分配。 –