没有实现接口的所有方法.可能吗?

Apu*_*til 56 java

有没有什么办法实现继承类的所有接口的方法呢?

Sam*_*ica 61

接口的要点是保证对象在接口指定的情况下向外行为

如果您没有实现接口的所有方法,那么就会破坏接口的整个目的.

  • +1表示接口的合同性质 (3认同)

Mik*_*ark 54

解决这个问题的唯一方法是将您的类声明为abstract并将其保留给子类以实现缺少的方法.但最终,链中的某个人必须实现它以满足接口合同.如果你真的不需要一个特定的方法,你可以实现它,然后或者在你的情况下return抛出一些NotImplementedException更合适的方法.

接口还可以将某些方法指定为"default",并在接口定义中提供相应的方法实现(https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html).实现接口时无需提及这些"默认"方法.

  • 我有一个后续问题.我总是只实现`Comparator`接口的`compare()`函数来使用`Arrays.sort()`对对象进行排序.但是现在我打开[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html),我发现那里定义了更多的方法.那么,我怎么能做到这一点? (4认同)

Pra*_*iya 12

我们可以覆盖abstract父类中的所有接口方法,并且子类只覆盖那个特定子类所需的那些方法.

接口

public interface MyInterface{
    void method1();
    void method2();
    void method3();
}
Run Code Online (Sandbox Code Playgroud)

抽象父类

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

}
@Override
public void method2(){

}
@Override
public void method3(){

}
}
Run Code Online (Sandbox Code Playgroud)

在您的儿童课程中

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

    }
}




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

    }
}
Run Code Online (Sandbox Code Playgroud)


Shu*_*pra 6

您可以在 Java8 中做到这一点。Java 8 引入了 \xe2\x80\x9cDefault Method\xe2\x80\x9d 或(Defender 方法)新功能,它允许开发人员向接口添加新方法,而不会破坏这些接口的现有实现。

\n\n

它提供了灵活性,允许接口定义实现,在具体类无法提供该方法的实现的情况下,该实现将用作默认值。

\n\n
interface OldInterface {\n    public void existingMethod();\n\n    default public void DefaultMethod() {\n        System.out.println("New default method" + " is added in interface");\n    }\n}\n//following class compiles successfully in JDK 8\npublic class ClassImpl implements OldInterface {\n    @Override\n    public void existingMethod() {\n        System.out.println("normal method");\n\n    }\n    public static void main(String[] args) {\n        ClassImpl obj = new ClassImpl ();\n        // print \xe2\x80\x9cNew default method add in interface\xe2\x80\x9d\n        obj.DefaultMethod(); \n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

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