Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';has-a';关系解释_Java_Oracle - Fatal编程技术网

Java';has-a';关系解释

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

我正在复习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) 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