学习C#遇到的接口的继承机制的问题
学习C#遇到的接口的继承机制的问题
如果不显式的重现实现接口,派生类就无法改变从基类中继承的接口映射
interface IControl
{
void Paint();
}
calss Control : IControl
{
public void Paint(){.....}
}
class TextBox : Control
{
new publict void Paint(){.....}
}
Control c=new Control();
TextBox t=new TextBox();
IControl ic=c;
IControl it=t;
c.Paint(); //invokes Control.Paint()
t.Paint(); //invokes TextBox.Paint()
ic.Paint(); //invokes Control.Paint()
it.Paint(); //invokes Control.Paint()
在这个程序中,类TextBox 的方法掩盖了 Control的方法,但是没有改变Control.Paint对IControl.Paint的映射 为什么会出现这样调动结果?
我的问题如下:
1:Control c=new Control();TextBox t=new TextBox(); 是两个实例化的类对象IControl ic=c;IControl it=t; 这两个语句什么意思?ic、it
是两个接口类型的对象 为什么可以可以被赋值类对象?
2:既然类TextBox 的方法掩盖了 Control的方法 那么执行it.Paint() 为什么还会调动 //invokes Control.Paint() 我认为应该是://invokes TextBox.Paint()?
问题点数:10、回复次数:2Top
1 楼lgq1314()回复于 2005-08-04 12:19:01 得分 0
等待中................
谢谢Top
2 楼lgq1314()回复于 2005-08-04 12:26:30 得分 0
1:基类指针可以指向派生类. 反过来则不行!
比如:有雇员接口. 经理类和普通职员类都继承雇员接口.
任何经理和普通职员都是公司的雇员. 反过来则不行.
2:TextBox类继承了Control类,覆盖了Control类的paint()方法.
这只是当调用TextBox类的paint()方法时,首先执行程序会从父类找,因为Control类的paint()方法被覆盖了,所以找不到.因为没有从父类获得相关的方法,程序会继续向下找.
直到找到方法.
如果直接调用接口对象,因为接口里只是声明方法,并没有逻辑实现.所以继续向该类的子类找,在Control类能找到该方法.
Top




