class
MobbliePhone
{
public
void
Test()
{
Console.WriteLine(
"我是手机"
);
Console.ReadLine();
}
}
class
Iphone : MobbliePhone
{
public
void
Test2()
{
Console.WriteLine(
"我是苹果"
);
Console.ReadLine();
}
}
class
Nokia : MobbliePhone
{
public
void
Test3()
{
Console.WriteLine(
"我是诺基亚"
);
Console.ReadLine();
}
}
class
Program
{
static
void
Main(
string
[] args)
{
Nokia[] nokia =
new
Nokia[2];
//nokia[0] =new Iphone(); 这是行不通的,因为同为子类的两个类型不同
//所以需要用上向上转换
MobbliePhone[] mobbliephone =
new
MobbliePhone[2];
mobbliephone[0] =
new
Nokia();
mobbliephone[1] =
new
Iphone();
//因为mobhliephone是MobbliePhone类型的一个引用,不论他指向哪个对象,都只能调用MobbilePhone里的方法
mobbliephone[0].Test();
//这样可以
//mobhliephone[0].Test3(); 这样就不行,尽管它指向了Nokia而且你知道他是个Nokia类型。
//这是需要用上向下转换,用as关键字可以做到这点
if
(mobbliephone[0]
is
Nokia)
//用is关键字判断指向的对象是否是Nokia
{
Nokia lumia520 = mobbliephone[0]
as
Nokia;
//用as关键字来完成向下转换
lumia520.Test3();
}
}
}