Java 是否在给定代码中使用接口?

Java 是否在给定代码中使用接口?,java,interface,Java,Interface,我有以下代码: public class TestClass extends NewClass { public static void main(String[] args) throws Exception { } @Override public void doSomething() { // TODO Auto-generated method stub } } interface I { void doSome

我有以下代码:

public class TestClass extends NewClass {

    public static void main(String[] args) throws Exception {

    }

    @Override
    public void doSomething() {
        // TODO Auto-generated method stub

    }

}

interface I {
    void doSomething();
}

abstract class NewClass implements I {
    // public abstract void doSomething();  // put doSomething() here and remove the interface or put doSomething() in the interface and implement it?

    public void myFunc() {
        doSomething();
    }

}

现在我的问题是:我应该把doSomething()方法放在抽象类中,还是应该创建一个单独的接口,把方法放在那里,让抽象类实现它?。哪个设计好?。请注意,代码库中已经使用了无接口方法,但我仍然想知道在接口中放置doSomething()并实现接口是否会更好。或者我应该遵循“不要因为可以创建类/接口而创建类/接口,如果必须创建它”的理念吗?

JLS指出,如果抽象类中的所有方法都是抽象的,那么最好使用接口而不是抽象类


如果您有非抽象方法,那么您必须使用抽象类,因为接口中声明的方法隐式地
public
abstract
。至于你的
doSomething()方法您可以用任何一种方式定义它-
abstract
或非
abstract
。若它是抽象的,那个么第一个具体的子类应该实现它。如果它是非抽象的,您仍然可以重写您的方法。

JLS指出,如果您的抽象类中的所有方法都是抽象的,那么最好使用接口而不是抽象类


如果您有非抽象方法,那么您必须使用抽象类,因为接口中声明的方法隐式地
public
abstract
。至于你的
doSomething()方法您可以用任何一种方式定义它-
abstract
或非
abstract
。若它是抽象的,那个么第一个具体的子类应该实现它。如果它是非抽象的,您仍然可以重写您的方法。

这取决于所讨论的情况,但一般来说,如果方法(或方法组)本身在没有抽象类上下文的情况下具有逻辑意义,那么使用接口是一个好主意,即使您还提供了一个带有某些骨架(或空)的抽象类实现。这给了测试人员和其他实现人员以不同于您预期的方式处理合同的自由


有关此模式的良好示例,请参见Java集合框架。主集合接口都有附带的
Abstract*
类,以便于实现,但不要求实现使用这些类,而专用类(如ORM框架)通常直接与接口一起工作。

这取决于所讨论的情况,但一般来说,如果方法(或方法组)本身在没有抽象类上下文的情况下具有逻辑意义,那么使用接口是一个好主意,即使您还为抽象类提供了一些骨架(或空)实现。这给了测试人员和其他实现人员以不同于您预期的方式处理合同的自由


有关此模式的良好示例,请参见Java集合框架。主要的集合接口都有附带的
Abstract*
类,以便于实现,但不要求实现使用这些类和专用类(如ORM框架)通常直接使用界面。

这听起来确实像是一个意见问题-还有一些其他问题可以帮助您做出决定:

  • 您是否还有其他可以实现接口
    I
    ?如果不是的话,可能接口没有作用,也不是必需的
  • 您的抽象类中有真正的函数吗?如果不是,也许它应该完全是一个接口

这听起来确实是一个意见问题-还有一些其他问题可以帮助你做出决定:

  • 您是否还有其他可以实现接口
    I
    ?如果不是的话,可能接口没有作用,也不是必需的
  • 您的抽象类中有真正的函数吗?如果不是,也许它应该完全是一个接口

Java支持3种构造:

  • 完全实现(即,您必须提供类中定义的所有函数的主体)
  • 抽象类-部分实现,部分未实现(它可以有一些方法留给子类实现,以提供更大的灵活性)
  • 接口-完全未实现。(实现类负责提供
  • 现在完全取决于你的要求

    当您想要定义规则并将实现留给用户时,接口也可用作契约


    抽象类在扩展抽象类的类之间存在一些共同功能的情况下非常有用。

    Java支持3种构造:

  • 完全实现(即,您必须提供类中定义的所有函数的主体)
  • 抽象类-部分实现,部分未实现(它可以有一些方法留给子类实现,以提供更大的灵活性)
  • 接口-完全未实现。(实现类负责提供实体。)
  • 现在完全取决于你的要求

    当您想要定义规则并将实现留给用户时,接口也可用作契约

    抽象类在扩展抽象类的类之间存在一些共同功能的情况下非常有用。

    作为一个概念:

  • 如果您可以这样做,请使用抽象类和继承 “A类是B类”。例如,你可以说,Inspiron N5010 是笔记本电脑
  • 如果您可以声明“A能够 [做]作为“,或者也作为一个