[英]extend an override method from abstract class in java
这是我的场景:
public interface Father{ public void sayHi(); }
public abstract class FatherImpl implements Father{
@Override
public void sayHi() { System.out.print("Hi"); } }
然后是孩子
public interface Child{}
public class ChildImpl extends FatherImpl implements Child{}
和测试功能是
Child c = new ChildImpl();
c.sayHi();
这将抛出编译错误。 只有当我改变子接口时
public interface Child{} extends Father
然后程序运行正常。
任何人都可以帮我解释原因。
Child c = new ChildImpl();
Child
接口没有sayHi()
方法,它位于ChildImpl
。 您将c
引用为Child
对象,因此您无法访问该方法。
您可以将对象引用为ChildImpl
或添加另一个类。
ChildImpl c = new ChildImpl();
要么
public abstract class TalkingChild {
@Override
public void sayHi() {
System.out.print("Hi");
}
}
要么
public interface TalkingChild {
public void sayHi();
}
最佳解决方案完全取决于您的具体方案。
问题是编译器只关心声明的类型 - 分配的类型是无关紧要的。
将此应用于您的案例, Child
类型没有方法。 它不认为你分配一个ChildImpl
,里面确实有一个sayHi()
方法,给Child
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.