当我查看一些问题时,我发现了这个问题。它询问花和玫瑰之间的关系是什么。所以选择是继承,类及其实例和接口&它的实施。
现在我的问题是答案应该来自我所知道的继承,但答案实际上是类和它的实例。那么我想知道的是类及其实例究竟意味着什么?据我所知,一个实例意味着一个类的对象。
感谢您的时间。
答案 0 :(得分:4)
一个类就像template
,从中创建了objects
。在您提到的示例中,花可以是rose
,dandelion
,lily
等可以作为实例的类。例如,
public class Flower {
private String type;
..
public Flower(String type) {
this.type = type;
}
..
}
并将其实例创建为
Flower rose = new Flower("rose");
Flower lily = new Flower("lily");
这是一个可行的解释。
我也可以看到你的逻辑思维过程。它可能是
public class Flower {
..
}
和
这样的子类public class Rose extends Flower {
..
}
和
public class Lily extends Flower {
..
}
但是,细微之处取决于实施。这取决于你如何看待问题(或者说提问者如何看待问题)。它也可能是an interface and its implementation
。同样,取决于实施。
更新1
您可以从此问题陈述中找到多个inheritance
级别。这一切都取决于您的应用程序所需的详细程度。如果您只想将任何花朵视为一个实体,您可以使用Flower
作为一个类,并使用不同的花卉实例作为您的对象。
另一种情况是,当你看到鲜花的细节层次时。你想谈谈不同类型的玫瑰,或不同类型的百合花,比如它们的颜色,大小,位置,季节等。在这种情况下,只有一个Flower
类就不够了。 Rose
可能包含仅与玫瑰相关的详细信息(properties
),Lily
可能只与百合有关。此时,只有Flower
不再相关,因为它们不会给您任何重要信息。现在,您可以将Flower
用作abstract class
或interface
,仅用于表示更高级properies
或确保找到某些implementations
。然后为每个继承的花创建单独的类,如Rose
和Lily
。
希望这可以解决疑问
答案 1 :(得分:2)
4)所有答案都是正确的。
继承 - 如果存在特定于玫瑰的其他行为,而这些行为不会表征任何其他花,则您将使用继承扩展基础。另一个选择是使用合成(你至少应该赞成它)。
类及其实例 - 如果除了名称之外没有添加玫瑰的行为。你将有一个构造函数到花类,制作一个玫瑰就像实例化它的名称一样简单,传递给构造函数。
界面&它的实施 - 如果每种类型的花具有不同的行为,但同时应遵循确定的合同。它就像第一个,除了你不需要基类。
答案 2 :(得分:1)
花只给模板实际的实例是rose
。即,花不存在物理/虚拟,存在具有花的特征的东西,它们被称为花的实例。
答案 3 :(得分:1)
正确的是,花 - >玫瑰将成为继承的一个例子。花更通用,玫瑰是一种特殊的花。
为了与花的例子保持一致,玫瑰的概念将成为阶级,而个体的实际玫瑰将成为实例。
类定义类型,它具有什么行为,它可以作为数据(或状态)具有哪些类型的值。实例是该类的成员,具有其状态的特定值。
答案 4 :(得分:1)
实际上,the relationship between flower and the rose
不适合class and its instance
。
class and its instance
可以放在这里,只有该类的一个实例是玫瑰。由于世界上有许多玫瑰,它不适合。如果你声称玫瑰是代表所有玫瑰属性的花的一个实例,而不是一朵玫瑰,我会争辩说有许多不同属性的玫瑰(例如黄玫瑰和红玫瑰),所以单个实例不能代表所有的玫瑰。
我会说继承更合适,因为玫瑰是一种花。