黑马程序员技术交流社区
标题: 虚方法和抽象类的问题 [打印本页]
作者: liangdmaster 时间: 2014-7-23 21:17
标题: 虚方法和抽象类的问题
例:
虚方法:
public class Father
{
public virtual void PlayGame()
{
}
}
抽象方法:
public abstract class Father
{
public abstract void PlayGame();
}
如上,为什么写虚方法时类前不加virtual,而写抽象方法时类前必须加abstract?
作者: 许庭洲 时间: 2014-7-23 21:36
本帖最后由 许庭洲 于 2014-7-23 21:38 编辑
1.在C#中,可以将类声明为抽象类。方法是在类定义中将关键字 abstract 置于关键字 class 的前面。例如:
public abstract class A
{
// Class members here.
}
2.抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如:
public abstract class A
{
public abstract void DoWork(int i);
}
3.在C#中,若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。
class GraphicsClass //基类方法必须定义为 virtual。
{
public virtual void DrawLine() { }
public virtual void DrawPoint() { }
public virtual void DrawRectangle() { }
}
作者: 蜗牛阿布 时间: 2014-7-23 21:36
virtual表示这个方法可以被子类override重写。
如果子类里的方法和父类的内部实现不同,那么就去override这个方法。相反,如果相同,可以继承父类方法。
virtual只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
也有说virtual修饰符是会隐式继承的。
---------------------------------------------------------------------------------------
因为抽象方法只是声明, 不提供实现,必须被派生类来继承,覆盖的方法。
作者: qsq0000hm 时间: 2014-7-24 07:12
类前加virtual,虚类,没有意义啊。子类已经继承父类了,父类方法用virtual修饰,设为虚方法,是方便子类方法重写,能够实现多态。类前加virtual,难道子类需要重写父类吗?抽象方法必须定义在抽象类中,并且子类继承的父类是抽象类的话,那么父类中的抽象方法是必须要被子类重写的,不然会报错。
作者: rende1991 时间: 2014-7-24 08:25
虚方法在基类中加了virtual,在子类中实现方法名前加override,虚表示可以重写,运行时绑定,抽象表示只有定义没有实现,希望对你有所帮助。
作者: czwanglei 时间: 2014-7-30 21:02
同学,你好当有人给你回复后,请你及时把帖子编辑为提问结束,这样版主才给你加分
作者: 倚楼听雨 时间: 2014-7-30 22:33
楼上正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |