如下
public class A
{
B b = new B();
}
public class B : A
{
}
有这种需求吗?符合面向对象吗?这样合理吗?
请大家帮帮忙
我也觉得不合理,不过这是某人的解释“子类给父类一种控制它的权利,就相当于总公司能控制子公司”。当然,父类A应该还有好多其他的子类。
这样不合理的。既然你在父类中能确定是用子类B而不是其它的子类,那你也就没有必要抽像出来个父类了。
我也觉得不合理,不过这是某人的解释“子类给父类一种控制它的权利,就相当于总公司能控制子公司”。当然,父类A应该还有好多其他的子类。
@leon032: 这是违背软件设计思想的,虽然可以这样实现功能,但是耦合性太强了。
合理,例如:
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, 能否具体解释一下?
@leon032: 你看.net的object类,它返回的变量也好,成员变量也好都是object的子类
@Greatest:
你写的这些代码就相当于一个工厂,通过名称获取子类实例,我想知道为什么要把这些写在父类里面呢?
父类引用子类元素很常用的呀。
如果你熟悉“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(){...};
}
你这样不叫引用子类吧!她是当做父类来处理的。
总公司控制子公司?不是那么控制的。
个人感觉,不合理,继承不是这么用的。