c#中父类能调用子类的方法吗

如题所述

我不太明白LZ问题的意思,"父类"是父类的引用还是实例?
在这个例子下:
class Father{}
class Child : Father
{
public void Method(){}
}
如果是实例,比如
Father fa=new Father();
那fa是不可以调用子类方法,逻辑上很容易得出结论,子类的方法可能调用到父类没有的成员,显然不可以调用.

如果是只引用,而且所指实例是子类
Father ch=new Child();
那么如下方法就可以调用子类方法了
(ch as Child).Method();
这种情况下,如果ch不是Child的实例,那会抛出异常(貌似是抛异常,LZ自己实践一下吧)。这是多态的一种基本实现方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-27
首先强调一点可以调仅仅可以调,不过如果这样做的话就成了普通类之间的调用了。这种方法不可取,失去了is-a关系的意义!应为就继承来说父类是优先于子类而存在的!上面说了可以通过类的实例来掉用。不过就父类于子类这种关系来说是不允许父类调用子类的。

参考资料:extends

第2个回答  2009-12-27
不可以,就是说,现有爸爸,再有儿子,儿子可以继承父亲的,但是父亲绝对不能继承儿子的。道理很简单
第3个回答  2009-12-28
可以.实例化一下子类就像调用其他类一样.可以调用.我刚写了个示例证实了
第4个回答  2009-12-27
其实也不一定啊,父类可以通过实例调用子类继承的父类的相应方法啊。
举例(都是public):
class father
{
father refer;
string WriteSomething()
{
return refer.WriteSomething();
}
}

class son:father
{
overrides string WriteSomething(){ return "inherted"; }
}

然后执行这段代码:
father f = new father();
son s = new son();
f.refer = s;
Console.WriteLine(f.WriteSomething());
之后屏幕上就会显示"inherted"这段字符了