1

我有一个具有 4 个方法的接口和一个实现该接口的类。问题来了:“我怎样才能从接口中只继承其中的两个方法,而我的类不会变成抽象的?”

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


public class Class2 implements Class1 {

    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }
}
4

5 回答 5

1

你没有。

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

如果您使用的是 Java 8,则接口中有新的默认实现,请查看此页面以获取详细信息,这可能会对您的情况有所帮助,除非您需要让您的具体类继承自为这两个提供实现的 Abstract不需要的方法(即使它打印一个欢快的“//TODO”)消息或从界面中删除它们。

于 2016-03-11T00:52:42.687 回答
1

您必须变得棘手,并且必须查找为什么会这样,尤其是在面试问题时。它基本上是为了兼容性(接口中的默认方法),并且需要 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 中使用默认实现定义。

于 2016-03-11T01:10:21.087 回答
0

interface当您希望一组程序遵循某种趋势或获得一组共同的属性时,可以使用An 。这些属性被声明为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();

}

让我们考虑 2 个名为Jimmy_the_dog和的类Tom_the_cat

我们希望这两个类实现interface animal赋予它动物的属性。但问题在于抽象方法barks()dog_breed()干扰。狗可以拥有接口 animal 中提到的所有属性,但猫继承方法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获取所有动物和狗的属性。

笔记:

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

于 2016-03-11T01:27:05.363 回答
0

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

如果没有实现接口的所有方法,可实例化类就无法实现接口。如果您没有实现所有必需的方法,则必须声明类抽象,或者必须删除 implements 声明。

于 2016-03-11T18:37:43.130 回答
0

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

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

    interface ClassB {
        void method3();
        void method4();
    }
于 2016-03-11T01:01:13.417 回答