[英]How do I add two ArrayLists of different classes that extend an abstract class into one ArrayList?
[英]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.member
為X
,然后將其strX
字段。
而且,如果要確保b1.member
是X
的實例,請使用類似if的測試
if (b1.member instanceof X) System.out.println(((X)b1.member).strX);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.