Java';has-a';关系解释
我正在复习java认证专业考试的一些示例问题,并希望对其中一个问题的答案有一点清晰:Java';has-a';关系解释,java,oracle,Java,Oracle,我正在复习java认证专业考试的一些示例问题,并希望对其中一个问题的答案有一点清晰: 2. Given: class Class1 { String v1; } class Class2 { Class1 c1; String v2; } public class Class3 { Class2 c1; String i3; } Which three options correctly describe the relationship between the classes? A) Cl
2. Given:
class Class1 {
String v1;
}
class Class2 {
Class1 c1;
String v2;
}
public class Class3 {
Class2 c1;
String i3;
}
Which three options correctly describe the relationship between the classes?
A) Class2 has-a i3
B) Class1 has-a v2
C) Class2 has-a v2
D) Class3 has-a v1
E) Class2 has-a Class3
F) Class2 has-a Class1
提供的答案是:C、D和F
我知道为什么C和F是正确的,但我不太确定D
我对“has-a”关系的理解是,因为它属于面向对象上下文,如果“a有一个Z”,这意味着类a要么有一个名为Z(或有时称为Z类型)的成员变量(或属性),要么通过继承也是如此,这意味着如果类a扩展了类B,而类B有一个Z,那么说类A也有一个Z(通过继承)是正确的
从我所看到的,Class3有c1和i3,因为Class3没有扩展任何类,这就是has-a关系结束的地方
我看到Class3有一个Class2,Class2有一个Class1,Class1有一个v1,但我没有意识到这意味着Class3有一个v1,在我看来Class1有一个v1
这直接来自Oracle网站:
Class3有一个名为c1的Class2,它有一个名为c1的Class1,它有一个名为v1的字符串
所以Class3有一个v1:
Class3.c1.c1.v1
我想有时候阅读你自己的问题会有所帮助。这是一个汽车示例。汽车有发动机,发动机有活塞,因此汽车有活塞。在面向对象的世界里似乎很奇怪,我的理解是错误的。我想我现在明白了。Ahas-A关系用于对象包含。包含意味着,一个对象包含另一个对象。它也可以称为合成
例如:一辆汽车有一个音乐系统,音乐系统有一个扬声器。因此,这辆车有一个扬声器
如果类具有实体引用,则会发生“has-a”关系。即聚合
选项D是正确的,因为,Class3包含Class2的实体引用,Class2包含Class1的实体引用
因此,类3的对象具有类2的属性,正如类2的对象具有类1的属性一样,类3与类1的关系称为“聚合/has-a”
Class1有一个v1,意味着Class3的对象包含v1的属性值。我觉得没用XD