java - 我如何在这里使用多态性来改进我的代码?

标签 java polymorphism

我读过它而不是使用 instanceofgetClass 方法来实现多态性,因为它是更好的面向对象实践。

如果我的程序如下所示:

Piece
SlowPiece extends Piece,
FastPiece extends Piece,
SlowFlexible extends SlowPiece,
FastFlexible extends FastPiece

我有以下规则:SlowPiece 只能移动一个空间,FastPiece 想移动多少就移动多少。

我如何使用多态性 来确保如果我正在移动一个像Piece piece1 = new SlowPiece(); 这样的Piece,它不会被移动超过一个?

我有一个游戏板类,它应该能够移动棋子,但我不确定如何阻止它在没有代码嗅探的情况下将 SlowPiece 移动超过 1 个。

基本上,我知道多态性对于说、列出事物有多么美妙,但是在实际与它们交互时我不知道如何正确使用它。

最佳答案

Piece 抽象化并向 Piece 添加抽象方法 move() (您也可以使用接口(interface))。以不同的方式实现 move()(SlowPiece 仅移动 1 个点,等等)。

public abstract class Piece {
    public abstract void move();
}

public class SlowPiece extends Piece {
    public void move() {
        System.out.println("moving a slow piece");
    }
}

public class FastPiece extends Piece {
    public void move() {
        System.out.println("moving a fast piece");
    }
}

Piece f = new FastPiece();
f.move();       

Piece s = new SlowPiece();
s.move();

这里,move() 包含了所有的移动逻辑;您甚至可以使用一些重载来允许移动变化(例如将 N/S/W/E 作为参数等)。

关于java - 我如何在这里使用多态性来改进我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665959/

相关文章:

java - 通过 Tomcat 在 ReSTLet 中获取用户主体

java - 如何使用 Pulsar 作为 Log4j2 的 Appender?

java - Hibernate - 搜索 - Java堆空间

java - 生成的 DisplayTag 排序和分页链接(url)太长

c++ - 关于序列化、反序列化的设计问题

java - Apache Camel BindException : "Can' t Assign Requested Address"

delphi - 调用子类非虚方法或设置子类属性

c++ - 我在理解继承和让多个类协同工作时遇到问题?

java - 为什么不能在通用 catch 子句中捕获自定义异常

java - JPA/Hibernate - 多态多对一关系设计