繁体   English   中英

Java中只有子类覆盖接口方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM