2012-11-29 3 views
0

Java를 사용하고 있습니다. 2 클래스를 받았습니다.클래스 확장 중 암시 적 슈퍼 생성자가 정의되지 않았습니다. 오류

class Card 
class Deck extends Card 

생성자 오류가 발생합니다.

대학을위한 블랙 잭 게임을 만들어야하고 데크 클래스를 확장해야합니다.

이 문제를 해결하려면 어떻게해야합니까?

class Card 
{ 
    int rank, suit; 
    String[] suits = { "hearts", "spades", "diamonds", "clubs" }; 
    String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" }; 

    Card(int suit, int rank) 
    { 
     this.rank=rank; 
     this.suit=suit; 
    } 

    String toString() 
    { 
      return ranks[rank] + " of " + suits[suit]; 
    } 

    int getRank() { 
     return rank; 
    } 

    int getSuit() { 
     return suit; 
    } 
} 




class Deck extends Card{ 

    ArrayList <Card> cards; 
    int numberdeck; 
    Deck() 
    { 
     cards = new ArrayList<Card>(); 
     for (int a=0; a<=3; a++) 
     { 
      for (int b=0; b<=12; b++) 
      { 
       cards.add(new Card(a,b)); 
      } 
     } 
    } 

    Card drawFromDeck() 
    { 
     Random generator = new Random(); 
     int index= generator.nextInt(cards.size()); 
     return cards.remove(index); 
    } 

    int getTotalCards() 
    { 
     return cards.size(); 
    } 
} 

답변

3

서브 클래스의 생성자는 이러한 생성자 코드에서 발견되지 않는, 수퍼 클래스에서 해당 생성자를 호출하기로되어 있지만된다.

인수를 취하지 않는 생성자를 수퍼 클래스에 추가하거나 서브 클래스의 생성자를 수퍼 클래스의 생성자로 호출하십시오.

하위 클래스의 생성자 본문 시작 부분에 super(0, 0);을 사용하여 수퍼 클래스의 생성자를 호출 할 수 있습니다.

+0

각각의 차이점은 무엇입니까? –

2

Deck은 실제로는 Card을 확장하면 안됩니다. 하위 분류는 is-a 관계를 인코딩합니다. 사자는 동물이므로 Lion extends Animal입니다. getRank() 및 getSuit() 메서드는 전체 카드 덱에서 의미가 없기 때문에 하위 클래스가 적절하지 않음을 알 수 있습니다.

카드 갑판은 카드가 아닙니다. 갑판 다른 카드가 포함되어 있습니다. 관계가 포함되어 있으면이 배열은 이미 ArrayList <Card> cards 배열로 표시됩니다.

+0

그것이 우리가해야 할 일입니다. 우리는 2 가지 옵션을 가지고 있습니다. 옵션 1 = 클래스 덱은 CardInterface 또는 Option2를 구현합니다. class Deck extends Card – emre

+0

@ baris22 교수님에게는 불쾌감이 없지만 두 가지 옵션 모두 나쁜 객체 지향 디자인입니다. –

+0

의심 할 여지없이 적어도 다음 집에 할당 할 때 인터페이스 방식을 선택하십시오. 상속은 15 년 전에 인기있는 기술이었습니다. 상속에 많은 단점이 있습니다. – AlexWien

관련 문제