【问题标题】:Inheritance can't call child class method继承不能调用子类方法
【发布时间】:2014-05-10 03:06:53
【问题描述】:

嘿,我正在尝试调用子类方法(ChildClass extends SuperClass())

SuperClass s=new ChildClass();
s.childClassMethod();

它没有看到 ChildClass 方法,我可以调用的唯一方法来自 SuperClass() 我知道这可能是一个愚蠢的问题,但无论如何都欢呼

【问题讨论】:

    标签: java inheritance methods


    【解决方案1】:

    父母对孩子掌握的任何新方法一无所知。

    public class SuperClass {
        // I have no method named "childClassMethod"...
    }
    
    public class ChildClass {
        public void childClassMethod() {
            // Do something.
        }
    }
    

    SuperClass 不知道childClassMethod()。您必须为这两个类提供一个接口,或者将该方法添加到父类并在子类中覆盖它。

    或者,您可以像其他人建议的那样简单地将对象转换为子类,但这可能不安全。

    ((ChildClass) s).childClassMethod()
    

    【讨论】:

      【解决方案2】:

      没错,你看不到它,因为s 是类型SuperClass,它没有这个方法——这显然会违反Polymorphism 的原则。

      因此,您要么必须更改 ((ChildClass) s).childClassMethod(); 之类的代码,要么将 s 设为 ChildClass 类型。

      【讨论】:

        【解决方案3】:

        那是因为超类没有那个方法。

        如果你想让超类能够调用方法,你需要把它抽象化并给它那个方法。

        子类是超类的一种形式,超类不是子类的一种形式。

        【讨论】:

        • 我明白了,如果我在超类中创建一个空方法,它会起作用吗?
        • @user1840040 是的,但是你必须让超类抽象,你也可以在超类中创建方法,然后在子类中覆盖它
        【解决方案4】:

        编译器不知道该引用在运行时将指向哪个实例,因此它只允许您在编译时访问超类的可访问方法

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-11
          • 1970-01-01
          • 2017-07-20
          • 2013-04-17
          • 2017-11-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多