继承隐藏的方法

时间:2016-03-11 00:48:49

标签: java oop inheritance method-hiding

我有一个有4个方法的接口和一个实现接口的类。这里提出了一个问题:“我怎样才能从接口继承这些方法中的2个而我的课程不会变得抽象?”

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


public class Class2 implements Class1 {

    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }
}

5 个答案:

答案 0 :(得分:1)

你没有。

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

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

答案 1 :(得分: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中的默认实现定义的。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

当您希望一组程序遵循特定趋势或获取一组公共属性时,将使用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的两个类。

我们希望这两个类实现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获得所有动物和狗的属性。

注意:

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

答案 4 :(得分:0)

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

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