我知道实现某些类的每个类Interface都必须覆盖它的所有方法.除非当前的课程是abstract.
正如您所见,在下面提到的代码模板中演示了这一点.
在我的情况下只ChildClass覆盖foo()方法.
接口
public interface MyItf {
public void foo();
}
Run Code Online (Sandbox Code Playgroud)
家长班
public abstract class ParentClass implements MyItf {
}
Run Code Online (Sandbox Code Playgroud)
儿童班
public class ChildClass extends ParentClass{
@Override
public void foo() {
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个实现要求我设置ParentClass类abstract.
如果我想离开ParentClass单班而不抽象怎么办?
有没有人有其他方式只有孩子使用MyItf而不是父类?
谢谢,
[编辑]
基于所有答案我在我的案例中找到了解决方案:
我编写了一个游戏,我有140个子类.
为了使代码更灵活,我需要创建"空"接口并允许所有孩子实现它,如:
public interface UnknownItf {
}
Run Code Online (Sandbox Code Playgroud)
所以下次如果我需要为孩子们添加新界面,我会写:
public interface UnknownItf extends NewItf{
///...
}
Run Code Online (Sandbox Code Playgroud)
如果我想将ParentClass保留为单个类而不是抽象怎么办?
嗯,你不能 - 你已经声明它实现了接口,但你没有提供任何实现.
换句话说,您希望此代码能做什么?
MyItf itf = new ParentClass();
itf.foo();
Run Code Online (Sandbox Code Playgroud)
如果ParentClass是具体的,那就必须编译......但你没有提供任何实现foo.
如果您只想实现子类MyItf,那么就不要声明超类实现它.如果你试图强制所有子类实现它,而不是超类,并且你不希望超类是抽象的,那么我担心没有办法做到这一点 - 它甚至会是一个有问题的设计如果可能的话.(它会有用吗?)