我正在学习多态性以及伞形课程的工作原理。我有一个主要的方法,在“孩子”类中。还创建了其他四个类,分别称为“ Ralph,“ Simon”,“ Piggy”和“ Jack”。我还有一个接口,这四个类实现了“ IslandAdventures”,其中包含方法trait()和action() 。我收到一条错误消息,要求将对象更改为各自的类型
例如:Ralph ralph = new Ralph();
码:
public static void main(String [] args)
{
Child ralph = new Ralph();
Child piggy = new Piggy();
Child jack = new Jack();
Child simon = new Simon();
ArrayList<Child> children = new ArrayList<Child>();
children.add(ralph);
children.add(piggy);
children.add(jack);
children.add(simon);
for (Child child : children)
{
child.trait();
child.action();
}
}
最佳答案
问题在于,当您说Child one = new Ralph();
时,不允许调用Ralph
的trait()
或action()
方法。 Child类型没有声明这些方法!
打个比方:Ralph
是新的三星电视型号,但是您购买了仅与该型号电视兼容的旧遥控器,因为它们均来自三星(Child
),并且您的遥控器没有所需的按钮来执行电视的所有功能。
您可以通过获取正确的遥控器来解决此问题(例如,错误提示要做什么,将Child
类型更改为Ralph
类型),也可以使其正确以使遥控器始终具有这些按钮(实现IslandAdventures
在Child
中)。
编辑:根据您的问题下的评论,我认为这里更大的问题是您没有在课堂上扩展Child。