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

时间:2012-07-11 16:24:29

标签: java

有没有办法 NOT 实现继承类中接口的所有方法?

11 个答案:

答案 0 :(得分:58)

接口的要点是保证一个对象在外部表现为接口指定它将

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

答案 1 :(得分:54)

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

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

答案 2 :(得分:11)

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

<强>接口

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(){

}
}

在您的儿童课程中

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

    }
}




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

    }
}

答案 3 :(得分:5)

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

答案 4 :(得分:4)

将该类定义为abstract类。但是,如果要创建它的实例(通过使用子类或匿名类),则必须实现这些未实现的方法。

答案 5 :(得分:3)

如果你想要一个可实例化的类,那是不可能的。不过,您可以尝试定义abstract类。

答案 6 :(得分:3)

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

您所要做的就是从实现该方法的类继承。如果你不介意一个不可实例化的类,那么你也可以定义一个abstract类。

答案 7 :(得分:1)

你可以在Java8中做到这一点。 Java 8引入了“默认方法”或(Defender方法)新功能,允许开发人员在不破坏这些接口的现有实现的情况下向接口添加新方法。

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

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

答案 8 :(得分:1)

如果您尝试实现一个接口,但发现自己处于不需要实现所有接口的情况,那么这就是代码的味道。它表明设计不好,并且违反了Liskov substitution principle。通常由于使用fat interface而发生这种情况。

有时还会发生这种情况,因为您试图从外部依赖项实现接口。在这种情况下,我总是查看源代码,以查看该接口是否有任何实现,可以直接使用它,也可以将其子类化并覆盖需要的方法。

答案 9 :(得分:0)

我们可以使用Adapter类,通过不强制实施接口中存在的所有方法来降低复杂性

Adapter类是一个简单的Java类,仅使用EMPTY实现来实现接口。     如果我们扩展Adapter类,则不执行接口,而是仅为require方法提供实现

ex ---如果扩展GenericServlet(AC)而不是实现Servlet(I),那么我们将提供Service()方法的实现,而我们不需要为其余的方法提供实现。

泛型类充当Servlet(I)的ADAPTER类。

答案 10 :(得分:0)

是的,下面显示的方法是

interface Test {
   void m() throws NullPointerException;
}
class Parent {
   // Parent class doesn't implements Test interface
   public void m() {
      System.out.println("Inside Parent m()");
   }
}
class Child extends Parent implements Test {
}
public class Program {
   public static void main(String args[]) {
      Child s = new Child();
      s.m();
   }
}