Java 创建新的抽象方法与接口方法

Java 创建新的抽象方法与接口方法,java,interface,abstract-methods,Java,Interface,Abstract Methods,问:如果您在一个未链接到接口的抽象类中创建抽象方法,您是否仍然遵循编程到接口的原则 我已经为我创建的所有UI类使用了一个接口;然而,考虑到接口的原因,我看不到与我想要创建的抽象方法和已经存在的接口之间的直接关联 通常,我只会创建抽象方法并完成;然而,我想知道我是否打破了接口程序的设计原则。 Q.我应该为此创建另一个接口还是只使用抽象方法? 注意:这不是接口与抽象类的问题 public abstract class BaseClass extends Clazz implements Interf

问:如果您在一个未链接到接口的抽象类中创建抽象方法,您是否仍然遵循编程到接口的原则

我已经为我创建的所有UI类使用了一个接口;然而,考虑到接口的原因,我看不到与我想要创建的抽象方法和已经存在的接口之间的直接关联

通常,我只会创建抽象方法并完成;然而,我想知道我是否打破了接口程序的设计原则。

Q.我应该为此创建另一个接口还是只使用抽象方法?

注意:这不是接口与抽象类的问题

public abstract class BaseClass extends Clazz implements Interface {

    // 1 out of 4 interface methods are implemented here
    CustomObj getMode() { ... }

    // I am actually also thinking of taking that 1 method - getMode() - out of the 
    //     interface and implementing it as an implemented method without an interface. 

    // Method that made me ask this question!!
    abstract CustomObj getDefaultMode();    // Not related to the interface - Interface

}


public interface Interface {

    String getFirstNumber();
    String getSecondNumber();

    CustomObj getMode();  // This one is implemented in the BaseClass, but I think it no longer belongs in this role

    // CustomObj getDefaultMode();  // This one is not in Interface, but makes be believe I need a new Interface or just have them declared in an Abstract Class.

}

注意:我的基类更适合简化具体类中的代码。基类处理一些被重写的方法、助手方法、初始化等。。。因此,它的作用不像接口,而是作为标准的抽象类。

Q.如果您在一个未链接到接口的抽象类中创建抽象方法,您是否仍然遵循编程到接口的原则

答:抽象类也是一种接口**。这取决于你如何使用它:如果你把它当作一种接口使用,那么你仍然遵守这个原则。如果抽象类是在子体之间重用代码的技术工具,那么这是一种违反

您始终可以添加
接口2扩展接口
,以反映此方法的额外功能。您提到了这个选项——如果抽象类不是“接口”,那么它可能是有意义的

对于不同的访问级别,有一种创建层次结构接口的模式。例如:

  • 用户
    界面-对用户详细信息的只读访问
  • usermaintenance扩展了用户界面
    还允许更新用户详细信息
看来你的案子可能属于这个定义


**例如,在编程SPI时,有时最好将接口作为抽象类,这样可以保持与旧版本的向后兼容性。

抽象类可能是诀窍,但正如本书所建议的,它会影响单元测试级别:

不要模拟混凝土类

抽象类的使用可能不会非常明确地显示与其合作者之间的各种潜在关系

这里有一个关于这个问题的例子,我几次问过,想进一步了解这个问题

你会告诉我:“但是抽象类不是具体类!” 我会称之为一个具体的类,每一个类都聚集了一些行为,以形成一个实体。
抽象类通常可以实现多个属于不同职责的方法,因此降低了对象协作者的明确性


因此,我将用“按角色编程”来重新表述“对接口编程”

我认为这个问题的措辞过于抽象,无法给出明确的是或否答案

一般来说,抽象类没有问题。问题是当人们滥用它们时。我们如何定义滥用?或者更确切地说,抽象类的正确用法是什么

为此,我们必须记住OO是一种模拟“真实世界”的方式:好的设计提供易于理解的模型,坏的设计很难遵循。此外,好的OO设计可以在建模问题可能扩展的方向上进行扩展。(很明显,我这里不是说
扩展
关键字。)

抽象方法所说的是:如果没有这个方法,这个类中声明的其他方法就没有意义。而接口所说的是,要成为一个X,至少需要这些方法

因此,虽然抽象方法是表达实现需求的一种方式,但接口定义了任何实现它的人都可以扮演的角色


有时你需要一个,有时你需要另一个。

抽象方法可以被保护起来。界面方法不能。

您能详细解释一下您编辑的内容吗?我只是有点理解它。