不在Java中实现所有接口的方法,是否有可能?

问题描述 投票:0回答:8

解决此问题的唯一方法是将您的班级声明为abstract

,并将其留给子类以实现丢失的方法。 但最终,链中的某人必须实施它以满足接口合同。 如果您确实不需要特定的方法,则可以实现它,然后
java interface abstract-class
8个回答
77
投票
或投掷一些

NotImplementedException

,以您的情况更合适。

接口还可以将某些方法指定为“默认”,并在接口定义中提供相应的方法实现(
Https://docs.oracle.com/javase/tutorial/java/java/iandi/iandi/defaultmethods.html-)。实现接口时不必提及这些“默认”方法。 

界面的要点是要确保对象将在接口指定它将

时向外行为 如果您没有实现界面的所有方法,那么您就会破坏界面的全部目的。


74
投票
我们可以覆盖父类中的所有接口方法,而子类中只能覆盖这些方法。

界面


22
投票

取消父级

public interface MyInterface{ void method1(); void method2(); void method3(); }

在您的孩子课程

public abstract class Parent implements MyInterface{
@Override
public void method1(){

}
@Override
public void method2(){

}
@Override
public void method3(){

}
}

您可以在Java8中做到这一点。 Java 8引入了“默认方法”或(Defender方法)新功能,该功能允许开发人员在不破坏这些接口的现有实现的情况下向接口添加新方法。 IT提供了灵活性来允许接口定义实现,该实现将在混凝土类未能为该方法提供实现的情况下用作默认值。

public class Child1 extends Parent{ @Override public void method1(){ } } public class Child2 extends Parent{ @Override public void method2(){ } }
    

我问自己同样的问题,然后了解了适配器。它解决了我的问题,也许可以解决您的问题。这很好地解释了:https://blogs.oracle.com/corejavatechtips/entry/listeners_vs_adapters

    

6
投票
将该类定义为

interface OldInterface { public void existingMethod(); default public void DefaultMethod() { System.out.println("New default method" + " is added in interface"); } } //following class compiles successfully in JDK 8 public class ClassImpl implements OldInterface { @Override public void existingMethod() { System.out.println("normal method"); } public static void main(String[] args) { ClassImpl obj = new ClassImpl (); // print “New default method add in interface” obj.DefaultMethod(); } }

类。但是,当您要创建它的实例时(使用子类或匿名类),必须实现这些未完成的方法。

这是可能的,这很容易。 我编码了一个
example。

您要做的就是从实现该方法的类中继承。 如果您不介意无法即时的课程,那么您也可以定义

5
投票
类。

如果您想要一个即时的类,那是不可能的。不过,您可以尝试定义

abstract

4
投票

如果您尝试实现一个接口,并且发现自己在无需实施所有界面的情况下,这就是代码气味。它表明设计不良,并且违反了liskov替代原则。通常,这是因为使用
fat接口

而发生这种情况。

4
投票
也有时会发生这种情况,因为您正在尝试从外部依赖关系实现接口。在这种情况下,我始终查看源代码内部,以查看该接口是否存在任何实现,我可以将其直接使用或对其进行亚键并根据我的需求覆盖方法。

我们可以使用适配器类,从而通过不强制实现接口中的所有方法来降低络合物。 Audapter类是一个简单的Java类,仅使用空的实现实现接口。 如果我们扩展了适配器类,而不是实现接口,而是仅针对requient方法

提供实施。

EX----而不是实现Servlet(i),如果我们扩展了genericservlet(AC),那么我们为Service()方法提供实现,而不是为保持Meyhod的剩余实现。

代理类充当servlet(i)的适配器类。 


2
投票

abstract

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.