2017-05-06 2 views
0

ok입니다. 따라서 다음 생성자와 함께 클래스 "Card"가 있습니다. 수트와 랭크는 필드로 저장됩니다.기본 생성자가 없습니다. - 상속

Card(String s, int r){ 
    suit = s; 
    rank = r; 
} 

나는이 방법

public int getRank(){ 
    return rank; 
} 
으로 순위를 반환 할

것은 내가 이름을 다른 클래스에서이 메소드를 호출 할 것입니다 Hand 나는 내가 가지고있는 카드 클래스 Card c = new Card();에 대한 참조를 만들 경우 생성자에 매개 변수를 입력합니다. 나는 이것을하고 싶지 않다. 나는 HandCard을 확장하기 위해 노력했다, 그러나 나는 오류를 얻을 수있다

없는 기본 생성자

내가 솔루션을 검색 한하지만 난 그냥 일을 얻을 수 없습니다.
내 질문은 :이 문제를 어떻게 해결할 수 있습니까?

편집 : 손 클래스

public class Hand extends Card { 
    Deck d = new Deck(); 
    Hand h = new Hand(); 
    ArrayList<Card> hand = new ArrayList<>(); 


    public void giveMeCard(){ 
     hand.add(d.dealCard()); 
    } 


    public ArrayList returnHand(){ 
     return hand; 
    } 

public int rank(){ 


    } 

} 
+0

'Hand'클래스를 게시하십시오. – hqt

+2

인수없이 Card 생성자를 호출하려면 Card 클래스에 인수를 사용하지 않는 생성자가 있어야합니다. 하지만 소송이나 등급이없는 카드는 무엇에 유용할까요? 상속은 완전히 무의미합니다. 핸드는 카드가 아니므로 핸드는 카드를 연장해서는 안됩니다. 그건 말이 안돼. –

+0

네 핸드 클래스 게시하기. –

답변

0

I 클래스에는 매개 변수가없는 생성자가 없습니다, 다음 서브 클래스는 기본 클래스의 기존 생성자 중 하나를 호출해야합니다. 귀하의 경우에는

당신은 그래서 당신은 기술적 인 측면에 관하여

Hand extend Card { 
Hand() { 
    super("s","r"); 
} 

이 있어야합니다 기본 클래스

class Card { 
    Card(String s, int r){ 
} 

있습니다. 모델링 및 로직 측면에 대해서는 HandCard으로 확장된다는 것은 전혀 의미가 없습니다. HandCard이 아닙니다. 그것은 set of cards을 포함합니다 (아마도 빈 세트 = 카드가 없습니다). 또한 (아마도) 카드의 상한선이 있습니다 (당신이 모델링 한 게임에 달려 있습니다).

카드 모델이 정확합니다. 정장과 랭크가 있어야합니다 (해당 필드는 Card 클래스의 비공개 마지막이어야합니다). 카드는 불변이어야합니다. 플레이어는 카드를 다른 카드로 바꿀 수 없어야합니다. 맞습니까? 사실 나는 RankSuit을 enum으로 모델링 할 것입니다 (그들은 잘 알려진 제한된 값 집합을 가지고 있습니다). 어쨌든 (문자열 또는 열거 형의 순위/수트) equals/hashcodeCard이고 Hand 클래스가 필요합니다.

Cards을 열거 형으로 사용하거나 final static 필드를 Card 클래스 (실제 카드의 경우 하나)로 모델화 할 때가 있습니다.

card을 처리 할 때 어떤 카드를 취급해야하는지, 즉 해당 카드의 등급과 소송을 알아야합니다. 나는 조커 카드를 다루지 않고 플레이어가 카드에 원하는 것을 페인트 할 수 있다고 생각하니?

나를 위해 Deck 카드도 있어야합니다. giveMeCard 방법은 Deck에서 (임의의) 카드를 가져와 덱에서 제거하고 핸드에 추가해야합니다. 아마도 deal이 더 좋은 방법 이름입니다. 기본 도메인 (카드 게임)을 더 잘 반영합니다.

+0

'super ("s", "r")'예제를 다시 생각해 볼 수 있습니다. – Tom

3

매개 변수를 생성자에 입력해야합니다. 나는 이것을하고 싶지 않다.

문제에 대한 해결책은이 작업을 수행 할을 원하는 을 시작하는 것입니다.

Card 특정 소송 및 등급은 무의미합니다. 의미없는 객체를 인스턴스화하고 싶지는 않습니다.

귀하의 이유는 카드 생성자가 예상하는 매개 변수를 사용하여 카드를 인스턴스화하고 싶지 않은 이유를 알려주지 않았지만 귀하의 사유가 무엇이든 정확하지 않을 수 있습니다.

그렇다면 양복을 전달하고 생성자에게 순위를 매겨야하며, 전달할 수있는 모든 작업을 수행해야합니다.이 작업을 수행 할뿐만 아니라 실제로이 작업을 수행해야합니다.

관련 문제