Java 没有实现接口的所有方法。可能吗?
有没有办法不在继承类中实现接口的所有方法?将该类定义为Java 没有实现接口的所有方法。可能吗?,java,interface,abstract-class,Java,Interface,Abstract Class,有没有办法不在继承类中实现接口的所有方法?将该类定义为抽象类。但是,当您想要创建一个实例时(通过使用子类或匿名类),必须实现这些未实现的方法。如果您想要一个可实例化的类,这是不可能的。您可以尝试定义一个abstract类。唯一的解决方法是将类声明为abstract,并将其留给子类来实现缺少的方法。但最终,链中的某个人必须实现它以满足接口契约。如果您确实不需要某个特定的方法,您可以实现它,然后返回或抛出各种各样的NotImplementedException,以适合您的情况为准 接口还可以将某些方
抽象类。但是,当您想要创建一个实例时(通过使用子类或匿名类),必须实现这些未实现的方法。如果您想要一个可实例化的类,这是不可能的。您可以尝试定义一个abstract
类。唯一的解决方法是将类声明为abstract
,并将其留给子类来实现缺少的方法。但最终,链中的某个人必须实现它以满足接口契约。如果您确实不需要某个特定的方法,您可以实现它,然后返回或抛出各种各样的NotImplementedException
,以适合您的情况为准
接口还可以将某些方法指定为“default”,并在接口定义()中提供相应的方法实现。在实现接口时,不需要提及这些“默认”方法 接口的要点是保证对象的外观行为与接口指定的一致
如果没有实现接口的所有方法,那么就破坏了接口的整个用途 这是可能的,也很容易。我编了一个密码
您所要做的就是从实现该方法的类继承。如果你不介意一个不可实例化的类,那么你也可以定义一个抽象类。我问了自己同样的问题,然后学习了适配器。它解决了我的问题,也许它能解决你的问题。这很好地解释了这一点:我们可以覆盖父类中的所有接口方法,而子类中只覆盖特定子类所需的那些方法
接口
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(){
}
}
在您的孩子班级中
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引入了“默认方法”或(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();
}
}
如果您试图实现一个接口,并且发现自己处于一种不需要实现所有接口的情况下,那么这就是一种代码味道。它表示设计不好,并且违反了。这通常是因为使用了
有时也会发生这种情况,因为您正试图从外部依赖项实现接口。在这种情况下,我总是查看源代码内部,看看是否有该接口的任何实现,我可以直接使用它,也可以将其子类化,并根据我的需要重写方法。我们可以使用适配器类,通过不强制实现接口中存在的所有方法来降低复杂性
Adapter类是一个简单的java类,它实现了一个只有空实现的接口。
若我们扩展了适配器类,那个么我们并没有实现接口,而是只为require方法提供实现
ex---如果我们扩展了GenericServlet(AC),那么我们将为Service()方法提供实现,而不是实现Servlet(I),我们不需要为其余meyhod提供实现
泛型类充当Servlet(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();
}
}
看到一篇关于这意味着它们被实现的好文章。@TonyHopkinson它们被实现了,但不是在课堂上。是的,但问题是如何不实现,而不是如何在其他地方实现。我有一个后续问题。我一直只实现了Comparator
接口的compare()
功能,使用Arrays.sort()
对对象进行排序。但是现在我打开了,我看到这里定义了更多的方法。那么,我是如何做到这一点的呢?@JohnRed再看看那个Javadoc。除了“比较”和“等于”之外,每个方法都标记为静态
或默认
。“equals”的文档还提到“请注意,不重写Object.equals(Object)总是安全的”。@TinWizard是“安全的”-不会抛出编译时间错误-不重写Comparator协定或类(实现Comparator)中的equals隐式继承自对象,因此equal方法实现已经存在“隐式”?清晰易懂