5

継承されたクラスも変数を継承する必要があることを理解しているので、このコードが機能しないのはなぜですか?

public class a {
    private int num;

    public static void main(String[] args) {
        b d = new b();
    }
}

class b extends a {
    public b() {
        num = 5;
        System.out.println(num);
    }
}
4

6 に答える 6

15

num変数のアクセス修飾子はprivateあり、privateメンバーは独自のクラスからアクセスできないためprotected、サブクラスからアクセスできるようにします。

public class a {
     protected int num;
     ...
}

クラスのメンバーへのアクセス制御のリファレンス

于 2013-02-15T09:55:37.950 に答える
2
public class A{
    public int num=5;
    public static void main(String[] args) {
        b d = new b();
        d.c();
    }
}

class b extends A
{
    public void c() 
    {
        System.out.println(num);
    }
}

間違いなくこれはあなたが必要とするものだと思います

于 2015-03-09T20:31:33.637 に答える
2

継承されたクラスは変数も継承する必要があることを理解しているので、

サブクラスでオーバーライドされていませinstance variablesん。継承とポリモーフィズムはインスタンス フィールドには適用されません。それらが保護または公開とマークされている場合、それらはサブクラスでのみ表示されます。現在、プライベートとマークされたスーパークラス変数があります。他のクラスはアクセスできません。他のクラスがアクセスできるように、保護または公開のいずれかをマークします。

于 2013-02-15T09:56:02.933 に答える
1

privateスコープは、それを含むクラスからのみアクセスできます。

これが機能するには、スコープnumを宣言する必要があります。protected

ただし、これにより、同じパッケージ内の他のクラスからもアクセスできるようになります。私の推奨は、適切なカプセル化を維持するためにget/メソッドを作成することです。set

その後、呼び出しnumてクラスでアクセスできますbgetNum()

于 2013-02-15T09:55:33.837 に答える
1

privateアクセス修飾子を使用しているためです。インスタンス変数またはメソッドに対してprivate を使用すると、クラス内にのみアクセスできます(複数のクラスでも 1 つのソース ファイルが含まれます)。ゲッターとセッターを使用して、プライベート変数を外部に公開できます。次のコードはエラーなしでコンパイルされます

public class A {
    private int num;

public void setNum(int num)
{
     this.num = num;
}

public int getNum() 
{
      return num;
    }


    public static void main(String[] args) 
{
        B d = new B();
    }


  }
  class B extends A
       {

      public B()
 {

        SetNum(5);
        System.out.println(getNum());
     }
   }
于 2013-02-15T11:14:11.740 に答える
0

サブクラスから基本クラスのプライベート メンバーにアクセスすることはできません。private/protected の修飾子を持つメンバーのみ

于 2013-02-15T09:55:37.063 に答える