黑马程序员技术交流社区
标题:
在c#中可以使用抽象函数重写基类中的虚函数吗?
[打印本页]
作者:
shangxin
时间:
2014-3-17 21:50
标题:
在c#中可以使用抽象函数重写基类中的虚函数吗?
本帖最后由 shangxin 于 2014-3-19 10:54 编辑
在c#中可以使用抽象函数重写基类中的虚函数吗?具体如何实现?
作者:
鬼鬼
时间:
2014-3-17 22:24
实测可行。建立三个依次继承的类:
父类:
class Parent
{
public virtual void print()
{
Console.WriteLine("父类!");
}
}
复制代码
子类:
abstract class Child : Parent
{
abstract public override void print();
}
复制代码
孙类:
class GrandChild : Child
{
public override void print()
{
Console.WriteLine("孙类!");
}
}
复制代码
子类使用抽象函数重写父类中的虚函数,孙类又重写子类中的抽象函数。
在Main函数中:
static void Main(string[] args)
{
Parent parent = new Parent();
GrandChild grandChild = new GrandChild();
parent.print();
grandChild.print();
Console.ReadKey();
}
复制代码
最终程序编译成功,运行正常,输出:
父类!
孙类!
证明实验成功。
技术有限,有不对的地方请批评指正。
作者:
百川
时间:
2014-3-17 22:35
开始我也是很晕,实际写了之后证明可以实现:
class Program
{
static void Main(string[] args)
{
Class1 cls1=new Class3();
cls1.func1();
Console.ReadKey();
}
}
class Class1
{
public virtual void func1()
{
}
}
abstract class Class2 : Class1
{
public abstract override void func1();
}
class Class3 : Class2
{
public override void func1()
{
Console.WriteLine("重写成功");
}
}
复制代码
作者:
cancle
时间:
2014-3-17 22:46
顶个,学习了~~
作者:
zhl406893081
时间:
2014-3-18 01:39
抽象类不一定是基类,但抽象类一定是父类,只要最后一个子类不是抽象类其他都无所谓.
C#是单继承机制,你可以反过来想想,如果把子类做成可以继承他父类同时又可以继承父类的基类,那么说明没有完全继承.所以,C#的单继承机制一定会把被继承的类往上的所有财产全部都拿到手.
所以,子类当然会继承基类中的虚函数,使用不使用是另外一回事.
我认为抽象类的意义就在于强制他的子类必须使用抽象函数,向上没有影响.话说没有自己特有抽象函数的抽象类完全可以直接删掉,没有意义啊...
作者:
czwanglei
时间:
2014-3-19 10:45
请把问题设置为提问结束,这样可以给你加分。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2