我有一个有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() {
}
}
答案 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_dog
和Tom_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声明。