|
发表于 2020-2-22 18:45:01
|
显示全部楼层
public interface Iaa
{
void show();
}
class ba //基类
{
public void show()
{
Console.WriteLine("ba.show");
}
}
class de : ba,Iaa //子类
{
new public void show()
{
Console.WriteLine("de.show");
}
}
class Program
{
static void Main(string[] args)
{
b = new de();
b.show(); //为什么显示 ba.show
((Iaa)b).show(); //为什么显示de.show
Console.Read();
}
}
class de : ba,Iaa //子类
本来这样写是不能编译通过的,应为de中没有实现接口Iaa的Show()方法
但是这里恰好由于de还继承了ba,而ba中恰好有Show()的函数
名字和需要实现接口的方法相同
(好多巧合哦-_-"但是巧合后面隐藏着必然吗)
这里其实做了这样的操作让基类ba的Show()作为了接口Iaa的Show()的实现
也就是说当我们采用基类的引用或者接口的引用那么指向的函数都是ba.Show()函数
因此:
((Iaa)b).show(); //为什么显示de.show--------所以显示ba.show
但是这里又由于使用new关键字,所有当我们使用de的引用去访问Show()函数的时候
函数指向的不再是基类中ba的方法了,而是自己new的方法Show()
因此:
b.show(); //为什么显示 ba.show -----------所以显示de.show
太多的巧合了!
-------------------------------------不知道对不对,只是分析没有执行-- -_-" -
|
|