继承隐藏的方法
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_dog
和 Tom_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 声明。
我有一个接口,它有 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_dog
和 Tom_the_cat
.
我们希望这 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 声明。