Java 接口上的多重继承

2022-09-01 10:44:40

我认为多重继承在Java中总是是非法的,但是这段代码编译:

public interface A {
  void a();
}

public interface B {
  void b();
}

public interface AB extends A, B {
}

拥有这样的空接口会被认为是一种不好的做法吗?有没有办法在避免空接口(使用泛型或其他方式)的同时实现类似的东西?AB

注意:我不是在问如何通过接口模拟多重继承。我意识到我可以做以下事情:

public class AbImpl implements A, B {
  public void a() {}
  public void b() {}
}

出于各种原因,我需要一个同时具有这两种方法的接口。


答案 1

不允许实现的多重继承。但是,组件可以继承多个接口。

继承多个接口没有问题,因为您只需定义要实现的新方法签名即可。传统上,这是对功能的多个副本的继承,通常被视为导致问题,或者至少是混乱(例如,死亡的钻石)。


答案 2

一个接口可以扩展一个或多个其他接口。还可以在类中实现多个接口。它是合法的,因为接口只是契约 - 没有实现。你只是在为一个类能够做什么定义一个契约,而没有说这个类将如何做。


推荐