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

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

117034 次浏览

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

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

解决这个问题的唯一方法是将类声明为 abstract,并将它留给子类来实现缺少的方法。但是最终,链中的某个人必须实现它来满足接口契约。如果您确实不需要特定的方法,那么您可以实现它,然后要么 return,要么抛出各种 NotImplementedException,这两种方法在您的情况下都是更合适的。

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

接口的要点是保证对象的外部行为与接口指定的行为一致

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

这是可能的,这很容易。我编码的 例子

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

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

我们可以重写 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(){


}
}

你可以在 Java8中这样做。Java8引入了“ Default Method”或(Defender Method)新特性,它允许开发人员在不破坏这些接口的现有实现的情况下向接口添加新方法。

它提供了灵活性,允许 Interface 定义实现,在具体的 Class 不能为该方法提供实现的情况下,该实现将作为默认实现使用。

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

如果您试图实现一个接口,并且发现自己处于不需要实现所有接口的情况下,那么这就是一种代码味道。它表明一个糟糕的设计,它违反了 Liskov代换原则。通常这是因为使用了 脂肪接口

此外,有时会发生这种情况,因为您正试图从外部依赖项实现接口。在这种情况下,我总是查看源代码内部,看看是否有接口的任何实现,我可以直接使用它或子类化它,并重写方法以满足我的需要。

我们可以使用 Adapter 类,它通过不强制实现接口中提供的所有方法来减少复杂性

Adapter 类是一个简单的 Java 类,它实现了一个只有 EMPTY 实现的接口。 如果我们扩展 Adapter 类,我们不会实现接口,而是仅仅为 request 方法提供实现

ex--- instead of implementing Servlet(I) if we extends GenericServlet(AC) then we provide implementation for Service()method we are not require to provide implementation for remaining meyhod..

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

是的,下面显示的是可能的方法

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