0

我正在尝试使用多态性和使用类进行练习。我写了一个超类,叫做Card. 然后我写了 3 个子类:IDCardCallingCardDriverLicense. 然后我编写了另一个名为的类Billfold,它应该包含两张卡的插槽。
我应该编写一个BillfoldTester程序,将两个不同子类的对象添加到一个Billfold对象中。

BillfoldTester中,一个DriverLicense对象和一个CallingCard对象被实例化并添加到 aBillfold中,它通过引用来引用这些对象Card

我真的不明白如何做到这一点。我创建了两个Card对象,但我试图将它添加到我的对象中,但Billfold它不起作用。我试过Billfold a = new Card (x);了,但这是不对的......非常感谢任何帮助。

public class BillfoldTester
{
    public static void main (String[]args)
    {
        Card x= new IDCard("Julie", 1995);
        Card j= new DriverLicense("Jess", 1997);
  //Having trouble trying to put the objects into my Billfold and print it.
    }
}

public class Billfold extends Card
{
    private String card1;
    private String card2;

    void addCard(String Card)//Not sure if this should be String
    {
        card1=Card;
    }
}

public class Card
{

   private String name;

   public Card()
   //This is my superclass
   {
      name = "";
   }

   public Card(String n)
   {
      name = n;
   }

   public String getName()
   {
      return name;
   }

   public boolean isExpired()
   {
      return false;
   }

   public String format()
   {
      return "Card holder: " + name;
   }
}
  public class IDCard extends Card
{
    //This is one of my subclasses
    private int IDNumber;
    public IDCard (String n, int id)

    {
        super(n);
        this.IDNumber=id;
    }
    public String format()
    {
        return super.format() + IDNumber;
    }
}
4

4 回答 4

1

这是错误的。钱包不是卡片;它有卡片。

public class Billfold
{
    List<Card> cards = new ArrayList<Card>();

    void addCard(Card card) {
        if (card != null) {
            this.cards.add(card);
        }
    }
}

更喜欢组合而不是继承。

于 2013-07-14T22:29:09.063 回答
1

多态性示例。不确定功能是否正是您所需要的,但您可以看到整个想法(我希望)。请参阅 Billfold 类的 showAllFormat() 方法。

重点在于 DriverLicense 和 IDCard 的不同 format() 方法。根据“真实”(或最初分配的)对象,即使您只引用“卡片”类,也会调用不同的方法。

注意:您没有提供您的 DriverLicense 实施,而我只是从头开始。我有一些不同的构造函数来显示这个子类可能完全不同。

import java.util.ArrayList;
import java.util.List;


class Billfold {
    List<Card> list = new ArrayList<Card>(10);

    void addCard(Card card) // Q: Not sure if this should be String
                            // A: You would like to add a Card
    {
        list.add(card);
    }

    void showAllFormat() {
        // go polymorphism !...
        // when you call this general 'format()' you see the subclasses
        // 'format()' is executed, not from 'Card' class
        for(Card x: list) {
            System.out.println(x.format());            
        }
    }
}

class Card {
    private String name; /* owner */

    public Card() //This is my superclass
    {
        name = "";
    }

    public Card(String n) {
        name = n;
    }

    public String getName() {
        return name;
    }

    public boolean isExpired() {
        return false;
    }

    public String format() {
        return "Card holder: " + name;
    }
}

class IDCard extends Card {
    //This is one of my subclasses
    private int IDNumber;

    public IDCard(String n, int id) {
        super(n);
        this.IDNumber = id;
    }

    public String format() {
        return "(ID)" + super.format() + " " + IDNumber;
    }
}

class DriverLicense extends Card {
    private String type;

    public DriverLicense(String n, String type) {
        super(n);
        this.type = type;
    }

    public String format() {
        return "(DL)" + super.format() + " TYPE: " + type;
    }
}

public class BillfoldTester {
    public static void main(String[] args) {

        Card x = new IDCard("Julie", 1995);
        Card j = new DriverLicense("Jess", "AB");

        Billfold bf = new Billfold();
        bf.addCard(x);
        bf.addCard(j);

        bf.showAllFormat();
    }
}
于 2013-07-14T23:09:39.933 回答
0

好的,您基本上走在正确的轨道上,只有几件事:

void addCard(String Card)//Not sure if this should be String
{
    card1=Card;
}

你是对的,这应该是:

void addCard(Card card)
{
    card1=card;
}

然后添加它们:

public class BillfoldTester
{
    public static void main (String[]args)
    {
        Card x= new IDCard("Julie", 1995);
        Card j= new DriverLicense("Jess", 1997);
        Billfold bf = new Billfold();
        Billfold.addCard(x);
        Billfold.addCard(j);
    }
}

然后添加一个方法来Billfold打印其中的卡片。

extends Card编辑:哦,是的,达菲莫是完全正确的,你不需要Billfold

于 2013-07-14T22:29:27.527 回答
0

你应该让Billfold类有两个Card对象,而不是两个Strings

public class Billfold
{
    Card card1;
    Card card2;

    void addCard(Card card) {
        if (card != null) {
            if (card1 != null) {
                this.card1 = card;
            } else {
                this.card2 = card;
            }
    }

}
于 2013-07-14T22:32:38.287 回答