Java中对象内的对象

时间:2015-12-07 03:04:32

标签: java oop object

我已经完成了一项课程作业,我必须根据规范建立原型酒店预订系统,具体如下:

  

您至少需要三个课程:

     

饭店

     

这应该存储有关酒店的所有重要信息,   包括名字和一些房间。

     

     

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

     

     

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

我对从哪里开始感到困惑!

我的印象是对象无法包含在其他对象中。

例如,假设我们实例化一个“酒店”对象。那么我们如何实例化“Room”对象,并在该对象中“Bed”对象? 这些对象是如何存储的?我们如何从另一个对象间接与他们互动?

2 个答案:

答案 0 :(得分:2)

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

听起来你想要研究的概念是作曲。当一个对象持有对另一个对象的引用时。

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类的构造函数中,我有一个名为room101的Room类型的变量。构造函数外部是相同类型和名称的实例字段。

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就可以在没有它的情况下调用它自己的方法。 (与实例字段/局部变量一样,方法不会出现这种情况)

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

答案 1 :(得分:0)

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

您的问题的核心似乎可以表示为来宾可以预订房间

我不想为你做你的工作,所以让我先问你将如何在代码中写下?在那之后,我们可以在" Hotel"和" Bed"。这是一项重大任务还是一个简单的问题?您的实施将取决于此。

学习和应用的规则是:

  

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