[英]Java: In child classes that implement interface, how to implement and refer to child class only methods and classes?
[英]Only child class overrides interface methods in Java
我知道,实现某些Interface
每个类都必须重写其所有方法。 除非当前类是abstract
类。
如您所见,下面提到的代码模板演示了这一点。
就我而言,只有ChildClass
覆盖foo()
方法。
接口
public interface MyItf {
public void foo();
}
家长班
public abstract class ParentClass implements MyItf {
}
儿童班
public class ChildClass extends ParentClass{
@Override
public void foo() {
}
}
但是此实现要求我将ParentClass
类设置为abstract
。
如果我想让ParentClass
成为单一类而不是抽象类怎么办?
没有人有其他方法,只有孩子使用MyItf
而不使用MyItf
吗?
谢谢,
[编辑]
根据所有答案,我找到了解决方案:
我编写了一个有140个子类的游戏。
为了使代码更加灵活,我需要创建“空”接口并允许所有子代实现它,例如:
public interface UnknownItf {
}
因此,下一次,如果我需要为孩子添加新接口,我将只写:
public interface UnknownItf extends NewItf{
///...
}
如果我想让ParentClass成为单一类而不是抽象类怎么办?
好吧,您不能-您已经声明它实现了该接口,但是您未提供任何实现。
换句话说,您期望此代码做什么?
MyItf itf = new ParentClass();
itf.foo();
如果ParentClass
是具体的,那必须进行编译...但是您没有为foo
提供任何实现。
如果只希望子类实现MyItf
,则只需不声明超类即可实现MyItf
。 如果您要强制所有子类(而不是超类)实现它,并且您不希望超类是抽象的,那么恐怕没有办法做到这一点-即使设计也将是一个有问题的设计如果可能的话。 (有什么用?)
没有人有其他方法,只有孩子使用MyItf而不使用ParentClass吗?
不要让父类实现该接口,而要让子类实现该接口。
该语言不允许您同时执行两种操作(将父类声明为接口类型,然后跳过实现方法,如果您希望跳过实现方法,则它是不完整的,因此应该是抽象的)
如果一个类实现一个接口,则该类或其超类必须实现接口方法,或者必须是抽象的。 两者同时也是可能的。 那么,孩子们就不需要实现这些方法了。
如果只希望孩子实现接口,则将其写入子类而不是父类
您为什么不能做到这一点很简单:
编译器发现ParentClass
实现MyItf
接口,然后尝试找到foo
方法的实现。 下面:
public class ParentClass implements MyItf
意味着:Java编译器ParentClass将实现MyItf中定义的所有方法
因此,您无法告诉编译器:
“ JAVAC不用担心! ParentClass
将具有一些将实现foo
方法的ChildClass
。所以继续……”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.