繁体   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