【问题标题】:Objects Within Objects in JavaJava中的对象中的对象
【发布时间】:2020-01-23 03:50:04
【问题描述】:

我接到了一个课程作业,我必须按照规范构建一个原型酒店预订系统,具体如下:

您至少需要三个课程:

酒店

这应该存储有关酒店的所有基本信息, 包括名称和一些房间。

房间

这应该存储一个房间的床位数。

这应该存储一张床的大小(即单人床或双人床)。

我完全不知道从哪里开始!

我的印象是对象不能包含在其他对象中。

例如,假设我们实例化了一个“Hotel”对象。那么我们将如何实例化“Room”对象,以及在该对象中的“Bed”对象? 这些对象是如何存储的?我们如何从另一个对象间接与它们交互?

【问题讨论】:

  • 如果我理解正确,这个问题似乎很基础,也许你应该先阅读有关 Java 和 oop 的教程。无论如何,一些解释:对象可以包含其他对象。它是通过成员变量 / 属性来完成的。您可以使用构造函数来初始化变量或使用方法设置值。

标签: java oop object


【解决方案1】:

通常,您不需要将类嵌套到称为内部类的其他类中,除非一个类负责的工作可以分块成小单元,在其父类之外永远不需要知道这些小单元。

听起来您想要研究的概念是组合。当一个对象持有对另一个对象的引用时。

public class Room {

    private boolean isVacant;

    public Room() {
        isVacant = true; // The room starts vacant
    }

    // Pretend there is a way for clients to check in and out of the room

    public boolean isVacant() {
        return isVacant;
    }
}

public class Hotel {

    // Using composition, I can make an instance of one class 
    // available to the methods of another
    private Room room101; 

    public Hotel(Room room101) {
        this.room101 = room101;
    }

    public boolean isRoom101Vacant() {
        return room101.isVacant();
    }
}

我们的酒店只有一个房间可能不是很有用,但这个例子展示了如何将一个对象“组合”成另一个对象。 Hotel 的方法现在可以使用它的 Room 实例(称为 room101)的方法。您将需要考虑您的房间的结构,以及您希望如何在您的酒店类中表示它。一些用于存储其他对象集合的对象包括ArrayListHashMap

编辑

this 是一个相当难以理解的概念,在您了解类与该类的实例(对象)的比较之前。在我的示例 Hotel 类的构造函数中,我有一个 Room 类型的变量,名为 room101。在构造函数之外是一个相同类型和名称的实例字段。

Java 将始终引用最近范围的变量或引用。因此,如果我有一个名为 room101 的方法引用,我如何在实例级别引用在构造函数之外声明的另一个方法?这就是this 的用武之地。

public class ThisExample {

    // This is a separate variable at the instance level
    // Lets call this global in the comments
    private int a; 

    public ThisExample() {
        // This is a separate variable in the method level, 
        // lets call this local in the comments
        int a; 

        a = 5; // our local is now assigned 5

        this.a = 10; // Our global is now assigned 10

        this.a = a; // our global is now assigned to 5

        a = this.a * 2; // our local is now assigned to 10 
    }
}

简而言之,this 指的是一个类的“this”实例。这是类实例引用自身的一种方式,就好像从外部一样。就像另一个对象如何将room101 的方法称为room101.isVacant()。 Room 类中的方法类似地执行this.isVacant() 以获得相同的效果。

最后一点,如果一个类中只有一个符号声明。 this 关键字是隐含的。所以 Room 可以在没有它的情况下调用它自己的方法,只要没有其他同名的冲突符号。 (与实例字段/局部变量相比,方法不会发生这种情况)

希望这有助于澄清一些事情!

【讨论】:

  • 开始变得更有意义了!您能否简要解释一下为什么在构造函数中使用“this”并将变量分配给自身?
  • @MartinRand 我扩展了我的答案以详细说明“这个”这个话题。希望这有助于解决问题!
  • 我已经开始上课了。你介意在和我聊天时讨论其他一些事情吗?你似乎知道你在说什么。
  • @MartinRand 当然。如果你创建一个房间并发布链接,如果我还在的话,我会加入。
【解决方案2】:

你的任务是如何将一些现实世界的概念建模成代码。

您的问题的核心似乎可以表述为客人可以预订房间

我不想为你做你的工作,所以让我先问一下你将如何用代码编写它?之后,我们可以处理“酒店”和“床”。这是一项重大任务还是一个简单的问题?您的实施将取决于此。

学习和应用的规则是:

对现实世界中对象的操作,在面向对象的方法中成为该对象的方法。

【讨论】:

    猜你喜欢
    • 2016-05-30
    • 2018-08-13
    • 2011-04-25
    • 1970-01-01
    • 2010-10-15
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多