我有一个包含三个方法的接口,我在子类中实现了这两个方法。
在此期间,我遇到了编译时错误。
我该如何处理这种情况?
Snippet One:
package com.college.problems;
public interface MethodDefination {
void methodOne();
void methodTwo();
void methodThree();
}
Snippet Two:
package com.college.problems;
public class MethodImplementation implements MethodDefination {
@Override
public void methodTwo() {
System.out.println("Tested");
}
@Override
public void methodThree() {
throw new UnsupportedOperationException("MethodDefination.methodThree()");
}
public static void main (String args[]){
MethodImplementation m = new MethodImplementation();
m.methodTwo();
}
}
注意:我不想实现接口所需的所有方法。
答案 0 :(得分:5)
如果你没有实现interface
的所有方法,那么你的类必须是abstract
,在这种情况下你不能创建它的实例。
在 Java 8 中,如果您的interface
包含某些方法的default
实现,则不必在实现该接口的类中实现它们。
但是,当然,如果需要,可以将它们覆盖到子类中。
答案 1 :(得分:3)
答案很简单:不要实现界面。
如果你实现它,你的类必须是抽象的,或者你必须实现接口中定义的所有方法(除非你已经继承了一个实现)。
为什么不像你执行methodThree那样实现它?或者做这样的事情:
public void methodOne(){}
虽然最好抛出一个Exception,但只是为了通知使用开发者他不应该这样做,并提醒用户发生了意外的事情;
答案 2 :(得分:1)
不,你不能这样做使用实现类作为abstact但你不能实例化类。然后使用接口你有完全抽象,所以你必须实现其中的所有方法。如果你只想使用两个方法使用抽象类。
您还可以将界面更改为抽象类,如
abstract class MethodDefination {
void methodOne() {};
abstract void methodTwo();
abstract void methodThree();
}
public class MethodImplementation extends MethodDefination {
public void methodTwo() {
System.out.println("Tested");
}
public void methodThree() {
throw new UnsupportedOperationException("MethodDefination.methodThree()");
}
public static void main(String args[]) {
MethodImplementation m = new MethodImplementation();
m.methodTwo();
}
}
输出
Tested
答案 3 :(得分:1)
答案是否。
但是如果你想定义一些功能,那么你可以实现一些方法并将该类定义为abstract
。通过这种方式,您的功能已定义。
但是对于这种类型的代码,您必须创建一个具体的类,并使用在抽象类中编写的现有方法,并在具体类中覆盖未实现的方法。
答案 4 :(得分:0)
如果您是implementing
interface
,则必须覆盖其中的所有方法。
但要实现目标,您可以使用abstract
类。
答案 5 :(得分:0)
您可以使用空方法或其他一些默认行为创建一个实现此接口的Abstract类。现在,不要实现接口,只需扩展您的Abstract类(您的扩展类仍将确认抽象类实现的接口),并仅覆盖您需要的方法。这是java库中的常见做法,例如在swing中,例如MouseListener是一个接口,MouseAdapter是一个Abstract类。如果不需要处理所有鼠标事件但只需要处理其中的一些事件,则可以使用Abstract类,因此您不需要全部实现它,并且您的代码更小更简单。
答案 6 :(得分:0)
您可以在此处使用默认方法概念。 JAVA8中引入了默认方法。
您不希望实现哪种方法将该方法保留为接口中的默认方法,并在该接口的子类中实现其余两种方法。
有关默认方法的更多信息,请查看以下链接
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
否则将您的界面更改为抽象类。
答案 7 :(得分:0)
您可以从三个选项中进行选择: 1.创建一个抽象类,并仅实现您需要的那些方法。 2.使用原型方法,即public void methodThree(){} 3.如果您有大量使用此接口的类,那么您可以使用适配器设计模式并在适配器类中提供默认/原型实现。您可以在enter link description here
上阅读适配器设计模式