何时使用oop pov中的接口

时间:2014-07-20 07:54:38

标签: java oop

我已经学过很多关于如何构建代码的东西。例如,名词会转换为(例如,类Dog,班级Banana)。对象具有的东西转换为类中的变量。 (例如,一只狗一个名字,所以名字将是Dog类中的变量。)我也被教导抽象名词转化为抽象类,例如,ChessPiece将是一个抽象类阶级和国王,典当等将继承它。

接口如何工作?我从来没有发现自己使用接口而我想要因为我听说你应该设计接口

4 个答案:

答案 0 :(得分:2)

接口"像这样工作"这样他们就可以在其实施者中执行合同。 IOW,接口说="你应该这样做"。所以,按照你的例子,你甚至可以认为"降低"通过观察ChessPiece实际上是GamePiece,因为它继承了所有游戏块所具有的一定量的行为。它可能很简单......

public interface GamePiece {
    void move(int x, int y);
    // more behaviors here
}

你有抽象的ChessPiece课程......

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
    }
}

您也可以将该合同应用于其他游戏作品。也许你想要一个CandyLand作品......

public class CandyLandPiece implements GamePiece {

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

答案 1 :(得分:1)

将接口视为协议。例如,板球和足球可以被视为课程。但他们遵循一个共同的协议说" Bouncable"。接口在逻辑上将不同类层次结构的类组合在一起。

根据评论修改答案:可弹跳界面可以有一个方法"反弹"。这反过来意味着所有实现Bounceable Interface的类肯定必须实现"反弹"。从逻辑上讲,这听起来也是正确的,每个Bouncable球(无论是板球还是足球)都必须能够反弹。

答案 2 :(得分:1)

我一般会同意第一段。

开启

  

接口如何工作?我从来没有发现自己使用接口,我想,因为我听说你应该设计一个接口。

你可能还没有用java来处理大型项目。

接口正是它们的声音 - 两个java模块可以通信的合同的定义。抽象类是接口+功能定义。

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

抽象类是为了避免在它们的子类中重复,但是,正如您所知,无法实例化,因此它们缺少某些功能,无法成为该类型的完整对象。

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

答案 3 :(得分:1)

从表面上看,接口非常类似于类,除非它们无法定义其中的方法。由实现类来定义方法,因为它们看似合适。由于Java非常明智地不允许一个类从多个类继承(多重继承),因此一个类仍然可以实现多个接口来实现此目标并避免多重继承带来的陷阱。 因此,您可以在界面动物中获得方法声音,并且实现此接口的每个类都必须以自己的自定义方式定义方法声音。这是一个例子,

假设您有一个具有makesSound方法的接口Animal。

类实现Animal的Dog也必须定义makeSound(){// bark}

类Cow实现Animal还必须定义makeSound(){// Moo}

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