Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承可以';t调用子类方法_Java_Inheritance_Methods - Fatal编程技术网

Java 继承可以';t调用子类方法

Java 继承可以';t调用子类方法,java,inheritance,methods,Java,Inheritance,Methods,嘿,我正在尝试调用子类方法(ChildClass扩展了超类() 它没有看到ChildClass方法我只能调用来自超类()的方法 我知道这可能是一个愚蠢的问题,但无论如何,cheers编译器不知道该引用在运行时指向哪个实例,所以它只允许您在编译时访问超类的可访问方法 见 这是因为超类没有该方法 如果您希望超类能够调用该方法,则需要将其抽象并赋予该方法 子类是超类的一种形式,超类不是子类的一种形式。没错,你看不到它,因为s是类型超类,它没有这个方法-这显然违反了原则 因此,您必须更改代码,如((

嘿,我正在尝试调用子类方法(ChildClass扩展了超类()

它没有看到ChildClass方法我只能调用来自超类()的方法
我知道这可能是一个愚蠢的问题,但无论如何,cheers

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


    • 这是因为超类没有该方法

      如果您希望超类能够调用该方法,则需要将其抽象并赋予该方法


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

      没错,你看不到它,因为
      s
      是类型
      超类
      ,它没有这个方法-这显然违反了原则


      因此,您必须更改代码,如
      ((ChildClass)s).childClassMethod()
      或使
      s
      成为
      ChildClass
      类型。

      父级不知道子级拥有的任何新方法

      public class SuperClass {
          // I have no method named "childClassMethod"...
      }
      
      public class ChildClass {
          public void childClassMethod() {
              // Do something.
          }
      }
      
      超类
      不知道
      childClassMethod()
      。您必须为这两个类提供一个接口,或者将该方法添加到父类并在子类中重写它

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

      ((ChildClass) s).childClassMethod()
      

      我明白了,如果我在超类中创建一个空方法,它会工作吗?@user1840040是的,但是你必须使超类抽象,你也可以在超类中创建方法,然后在子类中重写它
      ((ChildClass) s).childClassMethod()