簡體   English   中英

如何將不同的班級用作一個班級的成員?

[英]How do I use different classes as member for one class?

我有一個超類A,兩個繼承自A的類X,Y和另一個將使用X,Y作為成員的類B。

public class A {
    public String strA;
}

public class X extends A {
    public String strX;
}

public class Y extends A {
    public String strY;
}

public class B {
    public A member;

    public B(A member) {
        this.member=member;
    }
}

public static void main() {
    X x = new X();
    Y y = new Y();

    B b1 = new B(x);
    B b2 = new B(y);

    System.out.println(b1.strA); //works
    System.out.println(b1.strX); //does not work!
    System.out.println(b2.strA); //works
    System.out.println(b2.strX); //does not work!
}

我怎么解決這個問題?

我的方法是將B中的成員的數據類型用作占位符?

謝謝!

您的代碼無法像Jon Skeet所說的那樣進行編譯,因為您試圖訪問B字段中的一個字段。

要進行編譯,代碼應該是

System.out.println(b1.member.strA); //works

要使用繼承的實例中的字段,在此處必須執行的操作明確地強制轉換了member引用。

如果您使用對母類的引用,它將僅顯示從母類可訪問的字段。

在這種情況下,只能通過A引用訪問strA


System.out.println(((X)b1.member).strX);

如您所見,首先將b1.memberX ,然后將其strX字段。

而且,如果要確保b1.memberX的實例,請使用類似if的測試

if (b1.member instanceof X) System.out.println(((X)b1.member).strX);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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