我读过它而不是使用 instanceof
和 getClass
方法来实现多态性,因为它是更好的面向对象实践。
如果我的程序如下所示:
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/