我正在审核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网站:
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=303&p_certName=SQ1Z0_804
答案 0 :(得分:1)
Class3有一个名为c1的Class2,它有一个名为c1的Class1,它有一个名为v1的String
所以Class3有一个v1:Class3.c1.c1.v1
答案 1 :(得分:1)
我想有时候阅读你自己的问题会有所帮助。它以汽车为例。汽车有发动机,发动机有活塞,因此汽车有活塞。在面向对象的世界中似乎很奇怪,我的理解是关闭的。我想我现在就明白了。
答案 2 :(得分:0)
has-a 关系用于对象包含。包含意味着,一个对象包含另一个对象。它也可以称为组合。
例如:汽车有音乐系统,音乐系统有扬声器。因此,汽车有一个扬声器。
'具有-A'发生关系如果类具有实体引用。即,聚合。
选项D是正确的,因为,Class3包含Class2的实体引用,Class2包含Class1的实体引用。
因此,Class3的对象具有Class2的属性,因为Class2对象具有Class1的属性,Class3与Class1有关系,称为' aggregation / has-a'。
Class1有一个v1,意味着Class3的对象包含属性值v1。