首页 > Java > java教程 > 正文

在 Java 中从 Hand 类调用 Card 类:构造函数与对象初始化

DDD
发布: 2025-08-01 15:24:01
原创
803人浏览过

在 java 中从 hand 类调用 card 类:构造函数与对象初始化

本文旨在解决在 Java 中如何从 Hand 类内部调用 Card 类,尤其是在初始化 Hand 对象时传入 Card 对象的问题。文章将详细讲解构造函数的使用,并提供多种解决方案,帮助读者理解对象间的关系和正确的初始化方法。

在 Java 中,当一个类需要使用另一个类的对象时,通常需要在构造函数中接收这些对象,或者在对象创建后通过方法添加。本例中,Hand 类需要包含多个 Card 对象,而 Tester 类希望在创建 Hand 对象时直接传入这些 Card 对象。问题的关键在于 Hand 类缺少一个能够接收多个 Card 对象的构造函数。

以下提供几种解决方案:

1. 添加带参数的构造函数

立即学习Java免费学习笔记(深入)”;

这是最直接的解决方案。我们需要在 Hand 类中添加一个构造函数,该构造函数接收多个 Card 对象。可以使用可变参数 (varargs) 来简化代码。

import java.util.ArrayList;

public class Hand {
    private ArrayList<Card> cards;

    public Hand() {
        cards = new ArrayList<Card>(); // initialize cards
    }

    public Hand(Card... initialCards) {
        cards = new ArrayList<Card>();
        for (Card card : initialCards) {
            cards.add(card);
        }
    }
}
登录后复制

在这个例子中,Hand(Card... initialCards) 是一个新的构造函数,它接受可变数量的 Card 对象。Card... initialCards 表示可以传入任意数量的 Card 对象,它们会被封装成一个 Card 数组 initialCards。然后,我们遍历这个数组,将每个 Card 对象添加到 cards 列表中。

现在,Tester 类中的代码就可以正常工作了:

public class Tester {
    public static void main(String[] args) {
        // No pair
        System.out.println("No pair");
        Hand noPair1 = new Hand(new Card(10, 3), new Card(3, 0), new Card(13, 2), new Card(5, 1), new Card(14, 3));
        System.out.println("\n");
    }
}
登录后复制

2. 使用默认构造函数并添加 Card 对象

Natural Language Playlist
Natural Language Playlist

探索语言和音乐之间丰富而复杂的关系,并使用 Transformer 语言模型构建播放列表。

Natural Language Playlist 67
查看详情 Natural Language Playlist

如果不能修改 Hand 类的构造函数,或者希望采用更灵活的方式添加 Card 对象,可以使用默认构造函数创建一个空的 Hand 对象,然后使用 add 方法逐个添加 Card 对象。

首先,在 Hand 类中添加一个 addCard 方法:

import java.util.ArrayList;

public class Hand {
    private ArrayList<Card> cards;

    public Hand() {
        cards = new ArrayList<Card>(); // initialize cards
    }

    public void addCard(Card card) {
        cards.add(card);
    }
}
登录后复制

然后,在 Tester 类中,使用默认构造函数创建 Hand 对象,并使用 addCard 方法添加 Card 对象:

public class Tester {
    public static void main(String[] args) {
        // No pair
        System.out.println("No pair");
        Hand noPair1 = new Hand();
        noPair1.addCard(new Card(10, 3));
        noPair1.addCard(new Card(3, 0));
        noPair1.addCard(new Card(13, 2));
        noPair1.addCard(new Card(5, 1));
        noPair1.addCard(new Card(14, 3));
        System.out.println("\n");
    }
}
登录后复制

3. (不推荐) 将 cards 字段设置为 public

虽然可以将 Hand 类的 cards 字段设置为 public,然后直接访问并添加 Card 对象,但这是一种不好的做法,因为它破坏了封装性。不建议使用这种方法。

总结与注意事项

  • 构造函数是初始化对象的重要手段。合理使用构造函数可以简化对象创建过程,并确保对象处于正确的初始状态。
  • 可变参数 (varargs) 是一种方便的语法,可以接受任意数量的同类型参数。
  • 封装性是面向对象编程的重要原则。尽量避免将类的内部字段设置为 public,以防止外部代码直接修改对象的状态。
  • 在选择解决方案时,需要考虑代码的可读性、可维护性和封装性。

通过以上几种方法,我们可以在 Java 中从 Hand 类内部调用 Card 类,并在初始化 Hand 对象时传入 Card 对象。根据实际情况选择最合适的解决方案,可以使代码更加简洁、易懂和健壮。

以上就是在 Java 中从 Hand 类调用 Card 类:构造函数与对象初始化的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号