使用Java继承

1 java oop inheritance

我想我错过了一些OOP编程的概念,但我不知道到底是什么.

我如何使用从不同类创建的对象?

例如,假设我必须使用卡片.有一个Card类,它包含所有共享属性.普通卡片和小丑卡片继承自卡片类(小丑可以接管任何卡片颜色),一张卡片可以没有任何价值或者值得点数,所以有一张ScoreCard继承自NormalCard.

UML:

那么我在编程时如何使用这个模型呢?我在阵列中创建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)

Mar*_*nik 5

我想你应该学习多态性.当与继承结合在一起时它变得强大:)

问题是你不应该真的知道这张卡是小丑/普通卡等.相反,您在接口/抽象类级别提供应该处理用户事件的方法.所有"真正的"类都应覆盖此方法并提供实现.我会说明这一点:

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)

}

希望这可以帮助