继承隐藏的方法

Inherit hidden methods

我有一个接口,它有 4 个方法和一个实现该接口的 class。问题来了:"How can I inherit from the interface only 2 of those methods and my class don't became abstract?"

interface Class1 {
    void method1();
    void method2();
    void method3();
    void method4();
}


public class Class2 implements Class1 {

    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }
}

你不知道。

在您的继承链中的某处需要实施这些方法。这就是接口的目的。

如果您使用 Java 8,接口中有新的默认实现,请查看 at this page 了解详细信息,这可能对您的情况有所帮助,除非您需要具体 class 继承自为这 2 个不需要的方法(即使它打印令人愉快的“//TODO”)消息或从接口中删除它们提供实现的抽象。

首先,您将从接口中获取所有方法并且不会跳过任何方法。然后你必须实现满足接口契约的方法。所以在你的情况下最好制作2个不同的接口并使用它们,因为你可以为一个[=15实现多个接口=].

   interface ClassA {
        void method1();
        void method2();
    }

    interface ClassB {
        void method3();
        void method4();
    }

你必须变得狡猾,你必须查找为什么这有效,特别是如果它是一个面试问题。基本上是为了兼容性(接口中的默认方法),需要Java 8.

public interface One {
  void method1();
  void method2();
  void method3();
  void method4();
}

public interface Two extends One{
  default void method1(){}
  default void method2(){}
}

public class Three implements Two{

  @Override
  public void method3() {}

  @Override
  public void method4() {}

}

非抽象Three.class实现了One.class的method3和method4,没有为method1和method2定义方法体。 Method1 和 Method2 在接口 Two.class.

中使用默认实现定义

当您希望一组程序遵循特定趋势或获得一组通用属性时,使用 interface。这些属性在 interface 中声明为方法。一个接口只能有抽象方法,必须继承这些方法并在继承线的某个地方定义它们。

抽象方法如下所示:

public void hello();

它没有方法体。你需要继承它并定义方法体。

让我们考虑一个interface animal

public interface animals
{
 public void walks();
public void eats();
public void sleeps();
public void dog_breed(); 
public void barks();

}

让我们考虑名为 Jimmy_the_dogTom_the_cat.

的 2 classes

我们希望这 2 个 classes 实现 interface animal 以赋予它动物的属性。但问题是抽象方法barks()dog_breed()在干扰。一只狗可以拥有界面动物中提到的所有属性,但是猫继承方法 barks()dog_breed().

没有意义

这是我们拆分 interface 的地方。这里,我们将动物界面拆分为狗界面和动物界面。因此,界面动物中的属性将变得更普遍。

public interface animals
    {
     public void walks();
    public void eats();
    public void sleeps();
    }


public interface dog
    {
     public void barks();
    public void dog_breed();

    }

如何解决以上两个接口?

  • public class Tom_the_cat implements animal

    • public class Jimmy_the_dog implements animal implements dog

Jimmy_the_dog 实现了两个接口来获取狗的特定属性。任何是狗的动物都可以这样做。同样,您也可以为世界上所有的猫制作特定于猫的界面。

以上界面也可以按以下方式工作:

  • public interface dog extends animal
  • public class Jimmy_the_dog implements dog

Jimmy_the_dog获取所有动物和狗的属性。

注:

一个class只能扩展一个class但它可以实现多个接口。

你不能那样做。它归结为 implements 关键字对 class 的含义。

一个实例化的class不能在没有实现接口的所有方法的情况下实现接口。如果您没有实现所有必需的方法,则必须声明 class 抽象或者必须删除 implements 声明。