如何在使用Java的接口中仅实现所需的方法

时间:2015-05-27 07:02:17

标签: java

我有一个包含三个方法的接口,我在子类中实现了这两个方法。

在此期间,我遇到了编译时错误。

我该如何处理这种情况?

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();
    }
}


注意:我不想实现接口所需的所有方法。

8 个答案:

答案 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

上阅读适配器设计模式