我想我错过了一些OOP编程的概念,但我不知道到底是什么.
我如何使用从不同类创建的对象?
例如,假设我必须使用卡片.有一个Card类,它包含所有共享属性.普通卡片和小丑卡片继承自卡片类(小丑可以接管任何卡片颜色),一张卡片可以没有任何价值或者值得点数,所以有一张ScoreCard继承自NormalCard.

那么我在编程时如何使用这个模型呢?我在阵列中创建N卡,在生成卡片时,我应该判断实际卡片是否是小丑/乐谱/普通卡片?以后如何测试一张卡片是否是一张小丑/普通/记分卡?因为如果ScoreCard有一个private int score; 和一个setter/getter NormalCard就不会有这个属性,所以当我写一个if语句时我不知道要测试什么.
Card[] cardsArray = new Card[52];
for (int i = 0; i<cardsArray.length;i++) {
//Some source tells if a card is a Score/Normal/Joker
String src;
switch (src) {
case "Joker":Card[i] = new JokerCard();
break;
case "Normal":Card[i] = new NormalCard();
.... etc
}
}
//Some Userevent:
..userevent(Card in) {
//Test what
if (in.value == 4) {
this.user.setScore(this.user.getScore()+in.score);
}
}
Run Code Online (Sandbox Code Playgroud)
我想你应该学习多态性.当与继承结合在一起时它变得强大:)
问题是你不应该真的知道这张卡是小丑/普通卡等.相反,您在接口/抽象类级别提供应该处理用户事件的方法.所有"真正的"类都应覆盖此方法并提供实现.我会说明这一点:
interface Card {
void handleUserEvent(UserEvent event);
Run Code Online (Sandbox Code Playgroud)
}
public class NormalCard implements Card {
public void handleUserEvent(UserEvent event) {
// do something here
}
Run Code Online (Sandbox Code Playgroud)
}
public class Joker implements Card {
public void handleUserEvent(UserEvent event) {
// hey I'm a joker
}
Run Code Online (Sandbox Code Playgroud)
}
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |