定义一个接口MyInterface, 然后父类MyBaseClass继承这个接口,子类MyClass继承MyBaseClass
public interface MyInterface
{
void show();
} public class MyBaseClass : MyInterface
{
public void show()
{
Console.WriteLine("BaseClass");
}
} public class MyClass : MyBaseClass
{
public new void show()
{
Console.WriteLine("ChildClass");
}
}
客户端代码:
class Program
{
static void Main(string[] args)
{
MyInterface mi = new MyClass();
mi.show();
}
}
根据多态性,这里mi为什么会调用父类MyBaseClass的show方法而不是子类MyClass的show方法??求详细的解答,谢谢!
public interface MyInterface
{
void show();
} public class MyBaseClass : MyInterface
{
public void show()
{
Console.WriteLine("BaseClass");
}
} public class MyClass : MyBaseClass
{
public new void show()
{
Console.WriteLine("ChildClass");
}
}
客户端代码:
class Program
{
static void Main(string[] args)
{
MyInterface mi = new MyClass();
mi.show();
}
}
根据多态性,这里mi为什么会调用父类MyBaseClass的show方法而不是子类MyClass的show方法??求详细的解答,谢谢!
MyInterface mi = new MyClass();
虽然是实例化了父类,但这里应该是先执行父类的构造函数MyBaseClass.MyBaseClass(),再执行子类的构造函数MyClass.MyClass(),然后该如何解释呢?
你如果改这样,效果不一样了
class Program
{
static void Main(string[] args)
{
Samtest st = new SamCls();
st.Show("Sam");
st = new SamCls2();
st.Show("Sam"); SamCls2 st2 = new SamCls2();
st2.Show("Kevin");
SamCls st3 = new SamCls2();
st3.Show("Kevin");
Console.ReadLine();
}
}
public interface Samtest
{
void Show(string str);
} public class SamCls : Samtest
{
public virtual void Show(string str)
{
Console.WriteLine("Base:" + str);
}
} public class SamCls2 : SamCls
{
public override void Show(string str)
{
Console.WriteLine("Child:" + str);
}
}
public void show()
你父类的show方法不是虚方法,所以子类的show实际上应该写new来隐藏父类的方法。但不论如何,父类的show是隐式实现接口的show方法。
那么调用时,自然是调用父类自己的方法了。
MyInterface mi = new MyClass();
现在声明的变量是接口,这个如何解释?