这是很明显的道理嘛!
比如:
class Father
{
public void A();
}
class Sun:Father
{
public void B();
}
显然,Sun类是不是有A,B两个方法?而Father只有A方法
Father f=new Father();//只能在其上调用A方法,而不能调用B方法,因为Father根本没定义B方法
如果按你的逻辑,父类到子类的转换是合法的,那么:
Sun s=f;或者Sun s=new Father();
从形式上说,你可以在s上调用B方法,但实际上s引用的是new Father(),怎么可能调用B方法?根本就没定义!
而反过来就不会出现任何问题:
Sun s=new Sun();//可以在s上调用A,B方法
Father f=s;或者Father f=new Sun();//从形式上就只能调用A方法,虽然引用的对象是Sun,但是不能调用,
基类派生类对象之间的关系
class A{}
class B : A {}
class C: A {}
B b = new B();
C c = b; //错误,因为类型不同
A a = b; //这样写是正确的,但是一定要注意:
这样做有一个明显的限制 a 对象只能访问基类中的成员不能访问派生类中的成员
这就是为什么C#完全面向对象的原因,因为C#中所有的东西都继承自System.Object,任何东西都能赋给一个object变量