我正在创建一些随机类,以更好地理解多态。
编码如下:
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 found
或SubPoly1
访问变量(例如SubPoly2
都会返回错误),程序就不会越过编译阶段,因为我遇到testObj[1].x
错误。任何帮助,将不胜感激。
最佳答案
这是因为您已声明testObj
为Poly1[]
,而x
不是在Poly1
中定义的,而是在SubPoly2
中定义的。在Poly1
引用上,您只能访问comPoly
。
要解决此问题,您需要将x
移至Poly1
或使用SubPoly2[]
或将Poly1
引用强制转换为SubPoly2
(仅当实例实际上是SubPoly2
时才可能)。哪一种最佳解决方案取决于功能要求。
也可以看看:
Inheritance tutorial