interface IMyInterFace
{
} class ClassA : IMyInterFace
{
} class ClassD : ClassA
{
} static void Main(string[] args)
{
ClassA ca = new ClassA();
ClassD cd = (ClassD)ca;
}转换会出错,什么原因呢?
{
} class ClassA : IMyInterFace
{
} class ClassD : ClassA
{
} static void Main(string[] args)
{
ClassA ca = new ClassA();
ClassD cd = (ClassD)ca;
}转换会出错,什么原因呢?
{
}
class 苹果:水果
{
}static void Main(string[] args)
{
水果 a= new 水果();
苹果 c = (苹果)水果;//水果不一定是苹果
}
Cow myCow = new Cow();
Chicken myChicken = new Chicken();
myCow.EatFood();
myChicken.EatFood();
多态性则更推进了一步,可以把某个基本类型的变量赋予其他派生类型的变量,例如:
Animal myAnimal = myCow;
不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
myAnimal.Moo();
但是,可以把基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
Cow myNewCow = (Cow)myAnimal;
这里不是吗?怎么不能啊?
ClassD cd = (ClassD)ca;你那段话的意思是这样
//...
Animal myAnimal = myCow; // Cow
//...
Cow myNewCow = (Cow)myAnimal;如果原始变量myAnimal的类型不时Cow或派生于Cow的类型,这个强制类型转换就会产生异常!
http://topic.csdn.net/u/20090206/22/6cbdf89f-a75f-434f-bca3-2dd872f92dee.html
class B : A;
class C : B;原始类型
A a = new B();
C c = (C)a;这样是可以吧?A a = new A();原始类型不是?这样不行?
C c = (C)a;