2016-04-26 10 views
2

スーパークラスのコンストラクタの外で初期化されたプライベート変数は、サブクラスで正しく継承されますか?Java:スーパークラスのプライベート変数の初期化

たとえば、次のコードでは、プライベートインスタンス変数xはサブクラスで正しく継承されますか? Rectangleで定義された2つのパブリックゲッターでのみ、Squareサブクラスでxとyにアクセスできることがわかります。しかし、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

はいこれは問題なく継承されます。コンストラクタに値が割り当てられていない場合は、インスタンスメンバーであるため、デフォルト値を取得することになります。

オブジェクトのデフォルト値はnullであり、各プリミティブはデフォルト値を持ちます。

+0

私はプライベート変数xにコンストラクタの外で値を割り当てるので、割り当てられた値は継承されませんが、デフォルト値は継承されることを意味しますか? 'private int x = 0'行を' private int x = 1'に変更すれば、サブクラスのデフォルトの0または1としてx値を取得できますか?ありがとうございました。 –

+0

インスタンスメンバーであり割り当てられているので、1 :)を取得します。 –

関連する問題