Java 何时使用oop pov中的接口

Java 何时使用oop pov中的接口,java,oop,Java,Oop,我学到了很多关于如何构造代码的知识。例如,名词翻译成类,例如,类狗,类香蕉。对象已转换为类内变量的内容。例如,dog有一个名称,因此name将是dog类中的一个变量。我还被教导,抽象名词可以转化为抽象类,例如,棋子将是一个抽象类,国王、棋子等将从中继承 接口是如何工作的?我从未发现自己在使用接口,我想这样做,因为我听说你应该设计一个接口。把接口看作协议。例如,板球和足球可以被视为课程。但他们遵循一个共同的协议,即可反弹。接口将不同类层次结构的类逻辑地组合在一起 根据注释修改答案:可反弹接口可以有

我学到了很多关于如何构造代码的知识。例如,名词翻译成类,例如,类狗,类香蕉。对象已转换为类内变量的内容。例如,dog有一个名称,因此name将是dog类中的一个变量。我还被教导,抽象名词可以转化为抽象类,例如,棋子将是一个抽象类,国王、棋子等将从中继承


接口是如何工作的?我从未发现自己在使用接口,我想这样做,因为我听说你应该设计一个接口。

把接口看作协议。例如,板球和足球可以被视为课程。但他们遵循一个共同的协议,即可反弹。接口将不同类层次结构的类逻辑地组合在一起


根据注释修改答案:可反弹接口可以有一个方法反弹。这反过来意味着所有实现可反弹接口的类都必须实现反弹。从逻辑上讲,这听起来也很正确,即每个可反弹的球,无论是板球还是足球,都必须能够反弹。

我大体上同意第一段

接口是如何工作的?我从未发现自己在使用接口,我想这样做,因为我听说你应该设计一个接口

您可能还没有用java处理过大型项目

接口正是它们听起来的东西——两个java模块可以通信的契约的定义。抽象类是接口+功能的定义

当我想到与外部模块通信时,我使用接口。它应该能够看到并使用您的界面,可能没有其他功能

抽象类的存在是为了避免其子类中的重复,但是,正如您所知,它们不能被实例化,因此它们缺少一些功能来成为该类型的完整对象


也许您应该提供一个可以在这里讨论的代码片段。

接口的工作方式是这样的,这样它们就可以在实现者之间执行一个契约。瞧,界面上说你应该这么做。因此,与您的示例保持一致,您可能会认为,通过观察棋子实际上是一个游戏件,因为它继承了所有游戏件都具有的一定数量的行为,您的想法甚至更低。它可能很简单

public interface GamePiece {
    void move(int x, int y);
    // more behaviors here
}
你有一个抽象的棋子类

public abstract class ChessPiece implements GamePiece {

    // could add more shared stuff here
    public abstract void move(int x, int y);
    // other stuff can be implemented if needed
}
国王会延长的

public class King extends ChessPiece {

    @Override
    public void move(int x, int y) {
        // move as the King does
    }
}
但你也可以将该合同应用于其他游戏。也许你想要一块烛台

public class CandyLandPiece implements GamePiece {

    @Override
    public void move(int x, int y) {
        // move as these pieces do
    }       
}        

从表面上看,接口与类非常相似,只是它们不能定义内部的方法。由实现类来定义合适的方法。由于Java非常明智地不允许一个类从多个类继承多个继承,因此一个类仍然可以实现多个接口来实现这一目标,并避免多个继承带来的陷阱。 因此,您可以在接口动物中有一个方法声音,实现该接口的每个类都必须以自己的自定义方式定义方法声音。举个例子

假设您有一个接口动物,它有一个MakeSound方法

类Dog实现Animal还必须定义makeSound{//bark}

类还必须定义makeSound{//Moo}


如果要为所有类实现相同的功能,最好扩展一个类,如果要为所有类使用相同名称的自定义功能,最好使用接口。通常,倾向于接口,因为它允许您在将来将一个类扩展到当前类。

那么这个接口会有什么样的方法?您能给我一个使用接口的示例吗?这非常有用,谢谢。我有点明白了。