首页 新闻 会员 周边

父类中定义子类合理吗?

0
[已解决问题] 解决于 2011-12-07 17:40

如下

    public class A
    {
        B b = new B();
    }

    public class B : A
    {
    }

有这种需求吗?符合面向对象吗?这样合理吗?

请大家帮帮忙

问题补充:

我也觉得不合理,不过这是某人的解释“子类给父类一种控制它的权利,就相当于总公司能控制子公司”。当然,父类A应该还有好多其他的子类。

leon_ALiang的主页 leon_ALiang | 初学一级 | 园豆:194
提问于:2011-12-06 11:09
< >
分享
最佳答案
0

这样不合理的。既然你在父类中能确定是用子类B而不是其它的子类,那你也就没有必要抽像出来个父类了。

LCM | 大侠五级 |园豆:6876 | 2011-12-06 11:13

我也觉得不合理,不过这是某人的解释“子类给父类一种控制它的权利,就相当于总公司能控制子公司”。当然,父类A应该还有好多其他的子类。

leon_ALiang | 园豆:194 (初学一级) | 2011-12-06 11:18

@leon032: 这是违背软件设计思想的,虽然可以这样实现功能,但是耦合性太强了。

LCM | 园豆:6876 (大侠五级) | 2011-12-06 15:47
其他回答(3)
0

合理,例如:

class Object{
private A a = new A;
private B b = new B;
public Object GetObjectByName(string name){
switch(name){
case "a":
return a;
}
}
public Object CreateObject(string name);...
}
Greatest | 园豆:678 (小虾三级) | 2011-12-06 11:36

@Greatest, 能否具体解释一下?

支持(0) 反对(0) leon_ALiang | 园豆:194 (初学一级) | 2011-12-06 11:39

@leon032: 你看.net的object类,它返回的变量也好,成员变量也好都是object的子类

支持(0) 反对(0) Greatest | 园豆:678 (小虾三级) | 2011-12-06 11:59

@Greatest: 

你写的这些代码就相当于一个工厂,通过名称获取子类实例,我想知道为什么要把这些写在父类里面呢?

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-12-06 15:50
0

父类引用子类元素很常用的呀。

如果你熟悉“Template method"设计模式的话,就不奇怪了。

但是不建议在父类中直接new子类对象,耦合太紧,可以通过factory方法或者参数传递。

以下是样例代码,直接敲的,没做编译,仅供参考:

class Base
{
protected virtual void func1()=0;
protected virtual void func2()=0;
protected virtual void func3()=0;

public virtual void Process(Base * pObject)
{
pObject->func1();
pObject->func2();
pObject->func3();
}
}
class Derived : Base
{
protected virtual void func1(){...};
protected virtual void func2(){...};
protected virtual void func3(){...};
}
胡屯 | 园豆:714 (小虾三级) | 2011-12-06 12:03

你这样不叫引用子类吧!她是当做父类来处理的。

支持(0) 反对(0) 小小刀 | 园豆:1991 (小虾三级) | 2011-12-06 22:17
0

总公司控制子公司?不是那么控制的。

个人感觉,不合理,继承不是这么用的。

顾晓北 | 园豆:10844 (专家六级) | 2011-12-06 13:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册