Mik*_*ark 54
解决这个问题的唯一方法是将您的类声明为abstract并将其保留给子类以实现缺少的方法.但最终,链中的某个人必须实现它以满足接口合同.如果你真的不需要一个特定的方法,你可以实现它,然后或者在你的情况下return抛出一些NotImplementedException更合适的方法.
接口还可以将某些方法指定为"default",并在接口定义中提供相应的方法实现(https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html).实现接口时无需提及这些"默认"方法.
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)
您可以在 Java8 中做到这一点。Java 8 引入了 \xe2\x80\x9cDefault Method\xe2\x80\x9d 或(Defender 方法)新功能,它允许开发人员向接口添加新方法,而不会破坏这些接口的现有实现。
\n\n它提供了灵活性,允许接口定义实现,在具体类无法提供该方法的实现的情况下,该实现将用作默认值。
\n\ninterface 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}\nRun Code Online (Sandbox Code Playgroud)\n
小智 5
我问自己同样的问题,然后了解适配器.它解决了我的问题,也许它可以解决你的问题.这很好地解释了它:https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters