我正在学习多态性以及伞形课程的工作原理。我有一个主要的方法,在“孩子”类中。还创建了其他四个类,分别称为“ 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();时,不允许调用Ralphtrait()action()方法。 Child类型没有声明这些方法!

打个比方:Ralph是新的三星电视型号,但是您购买了仅与该型号电视兼容的旧遥控器,因为它们均来自三星(Child),并且您的遥控器没有所需的按钮来执行电视的所有功能。

您可以通过获取正确的遥控器来解决此问题(例如,错误提示要做什么,将Child类型更改为Ralph类型),也可以使其正确以使遥控器始终具有这些按钮(实现IslandAdventuresChild中)。

编辑:根据您的问题下的评论,我认为这里更大的问题是您没有在课堂上扩展Child。

10-04 21:35