You need to enable JavaScript to run this app. Java实现持有Card列表属性的Deck类:报错解决与52张牌组构建
优惠活动
大模型
产品
解决方案
定价
更多

Java实现持有Card列表属性的Deck类:报错解决与52张牌组构建

代码编译报错原因与修复方案

核心报错根源

  • 继承关系定义错误:Deck类不应继承Card类。二者是包含与被包含的组合关系,而非父子继承关系。Java子类构造方法执行时会默认调用父类的无参构造,由于Card类仅定义了Card(String name, Suit type)双参构造、不存在无参构造,因此触发Implicit super constructor Carta() is undefined报错,手动添加super()无法解决问题,因为不存在可调用的无参Card构造。
  • 实例化对象遗漏关键字:构造方法中this.deck.add(Card("two", Suit.CLUBS))未加*new*,编译器会将该代码识别为调用名为Card的普通成员方法,而非创建Card类实例,因此弹出Create method Card(String, Suit)的提示。

实现全52张牌组的完整可编译代码

1. 花色枚举定义

public enum Suit {
    SPADES, HEARTS, DIAMONDS, CLUBS
}

2. 单张牌Card类

public class Card {
    private String name;
    private Suit type;

    public Card(String name, Suit type) {
        this.name = name;
        this.type = type;
    }

    @Override
    public String toString() {
        return name + " of " + type;
    }
}

3. 修正后的牌组Deck类

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

public class Deck {
    public List<Card> deck = new ArrayList<>();

    public Deck() {
        // 定义标准牌组的所有牌面名称
        String[] cardNames = {"two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king", "ace"};
        // 遍历所有花色、所有牌面生成完整52张牌
        for (Suit suit : Suit.values()) {
            for (String cardName : cardNames) {
                // 补充new关键字创建Card实例
                this.deck.add(new Card(cardName, suit));
            }
        }
    }

    public void printDeck() {
        for (Card card : deck) {
            System.out.println(card);
        }
    }
}

关键修正说明

  • 移除Deck类对Card类的继承,采用组合关系建模:面向对象设计中,is-a关系适合用继承实现,has-a关系适合用成员属性实现。牌组(Deck)的核心特征是“持有多张飞牌”,完全匹配has-a的逻辑,该调整从根源上消除父类构造器缺失的编译报错。
  • 所有实例化Card类的代码前补充new关键字,明确告知编译器要创建类的实例对象,而非调用同名普通方法。
  • 全量52张牌的生成采用嵌套遍历逻辑:一次遍历枚举的4种花色,一次遍历13种牌面名称,循环生成Card实例加入牌组列表,避免逐行手写重复添加代码的冗余问题。

内容的提问来源于stack exchange,提问作者António Rocha Gonçalves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 23:45:00