男人们在寻找作文和遗传的区别,然后我在某个地方找到了这篇文章。
在代码重用方面,post组合优于继承。
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public int peel() {
System.out.println("Peeling is appealing.");
return 1;
}
}
class Apple {
private Fruit fruit = new Fruit();
public int peel() {
return fruit.peel();
}
}
class Example2 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}更改后端类
class Peel {
private int peelCount;
public Peel(int peelCount) {
this.peelCount = peelCount;
}
public int getPeelCount() {
return peelCount;
}
//...
}
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public Peel peel() {
System.out.println("Peeling is appealing.");
return new Peel(1);
}
}//苹果必须更改以适应//果品的变化
class Apple {
private Fruit fruit = new Fruit();
public int peel() {
Peel peel = fruit.peel();
return peel.getPeelCount();
}
}// Example2 //的旧实现仍然正常工作。
class Example1 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}这就是我根据帖子没有得到的是说的“如果后端类的接口发生变化,前端类的实现也会改变,但它的接口不会改变”。
这里的implementation是什么接口?
这只是我的假设,告诉我如果IM错了??(也许一切都是错的)。
后端类是否是接口,因为前端类依赖于它?
前端类的implementation是前端类中的实现代码吗?
前端类也是接口,因为示例中的代码依赖于吗?
它们是否是大声耦合的,因为更改到后端接口没有更改为前端接口?因此,依赖于前端接口的代码仍然有效。
如果我使用继承,子类是否紧密耦合在超类中?因为对超类的更改也将更改为子类,因此依赖于子类的代码可能无法工作。
Wny继承是弱封装的。
发布于 2012-05-15 01:18:58
这是苹果和水果之间应该发生的直观的继承关系。然而,这不是上面的例子所做的。

上面的例子是使用组合,这意味着Fruit是Apple的一部分(参见uml 这里)。这太违反直觉了!在这种情况下,Fruit和Apple都有单独的peel实现。peel()在Apple中的实现使用Fruit.peel()。

我认为要点是,如果Apple使用与Fruit的组合关系,那么它的实现可以独立于果树。例如,我可以使用其他一些实现,而不是使用Fruit.peel()来获取Apple.peel()的计数。但是如果Apple继承了Fruit的果皮,那么Fruit的变化也会改变Apple。因此,Apple并不独立于Fruit,所以我们说它是紧密耦合的。
从几个方面来说,这是一个不好的例子: 1)我们都知道苹果是水果,因此继承似乎是最正确的实现。2)继承似乎是实现事物的最枯燥的方式,因为使用组合要求您更正Apple类,以便在对Fruit.peel()进行更改时执行与Fruit.peel()相同的操作。
编辑:阅读了这篇文章后,我觉得主要是概述使用继承的缺陷。适当地使用继承是没有问题的。仅仅为了代码重用而使用它可能会导致问题,如果子类没有真正从超类继承行为。
回答你的问题!
后端类是否是接口,因为前端类依赖于它?
足够近了。所有类都有一个“接口”。这并不意味着它们在类声明中确实有implements IFruit,它只是指对象的形状--对象拥有哪些方法,而不管这些方法是如何工作的。
前端类的实现是前端类中的实现代码吗?
粗略地说是的。构成类中方法主体的代码的实际逻辑是该类的实现。
前端类是否也是一个接口,因为示例中的代码依赖于它?
差不多吧。与任何其他类一样,Apple有一个隐式接口。如果Example使用Apple类,那么它只能使用作为接口一部分的方法。
它们是不是因为后端接口的更改没有改变前端接口而导致耦合呢?
是的,这是用“松耦合”这个词的一种方式。
如果我使用继承,子类是否紧密耦合在超类中?因为对超类的更改也将更改为子类,因此依赖于子类的代码可能无法工作。
是的是的。这两个类是紧密耦合的,因为它们的行为并不完全封装在每个单独的类中。这并不总是错的,这取决于情况。
Wny遗传是弱encapsulation.sic
因为行为是在超类和子类之间共享的。
https://stackoverflow.com/questions/10592683
复制相似问题