组成与内部课程

Ale*_*xis 6 java composition inner-classes

组成和内部类之间有什么区别和相似之处?我正在尝试学习Java的原理,并试图弄清楚整个图像。对我来说,更好地进行类比并了解概念之间的异同,以便正确地使用它们。

组合的定义:“组合是在类中实现has-a关系的设计技术”。“ Java组合是通过使用引用其他对象的实例变量来实现的”

内部类的定义(或成员类,不是匿名的):“成员类也被定义为封闭类的成员,但未使用static修饰符声明。这种内部类类似于实例方法或字段成员类的实例始终与封闭类的实例相关联,并且成员类的代码可以访问所有字段和方法”

因此,通过面对两个定义,我看到了一些相似之处:

1. Both have HAS-A relationship
2. Both are strictly dependent on the outer class lifetime
3. can be declared private
Run Code Online (Sandbox Code Playgroud)

差异:

1. Inner classes uses classes, composition use instances (?!)
2. In composition no restriction to use the variables of the "outer" class
Run Code Online (Sandbox Code Playgroud)

如果我完全错了,请纠正我,我需要更好地追踪两个概念的局限性。

Leo*_*ruz 5

这两个方面是相关的。为了更好地组织我的事,让我们定义A和B:

  • A是由内部类组成的类成员。
  • B是由外部类的实例组成的类成员。

例:

class Driver {
}

class Car {

    // A
    class Engine {
        void start() {
            if (gasLevel > 0) {
                ...
            }
        }
    }

    //B
    Driver driver;

    int gasLevel;

}
Run Code Online (Sandbox Code Playgroud)

说:

  • A是一个领域
  • B是一个领域
  • A是一个内部阶级
  • B不是内在阶级
  • A有权访问汽车内部状态(gasLevel)
  • B无法访问汽车内部状态(gasLevel)
  • 没有Car实例,引擎就不存在。
  • 驱动程序存在而没有Car实例。

综上所述,两个不同类之间的组合以及内部类之间的组合是控制系统耦合和内聚级别的方法。