我正在创建一些随机类,以更好地理解多态。
编码如下:

Poly1:

public abstract class Poly1 {
    int comPoly;
}


SubPoly1:

public class SubPoly1 extends Poly1 {
    String testPoly;
}


SubPoly2:

public class SubPoly2 extends Poly1 {
    int x;
}


testPoly:

public class testPoly {
public static void main(String[] args) {
    Poly1[] testObj = new Poly1[2];
    testObj[0] = new SubPoly1();
    testObj[1] = new SubPoly2();
    testObj[1].x = 1;
    testObj[1].comPoly = 2;
    System.out.println("Test Output : " + testObj[1].x+ " and " + testObj[1].comPoly);
    testObj[0].testPoly = "Hello";
    testObj[0].comPoly = 8;
    System.out.println("Test Output : " + testObj[0].testPoly+ " and " + testObj[1].comPoly);
   }
}


但是,只要我尝试从symbol not foundSubPoly1访问变量(例如SubPoly2都会返回错误),程序就不会越过编译阶段,因为我遇到testObj[1].x错误。

任何帮助,将不胜感激。

最佳答案

这是因为您已声明testObjPoly1[],而x不是在Poly1中定义的,而是在SubPoly2中定义的。在Poly1引用上,您只能访问comPoly
要解决此问题,您需要将x移至Poly1或使用SubPoly2[]或将Poly1引用强制转换为SubPoly2(仅当实例实际上是SubPoly2时才可能)。哪一种最佳解决方案取决于功能要求。
也可以看看:

Inheritance tutorial

10-06 02:16