A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 甘斌斌 中级黑马   /  2013-6-18 06:16  /  1336 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

虚方法和抽象类有什么区别?具体什么时候用哪个呢?

5 个回复

倒序浏览
抽象类不能实例化。
抽象类可以包含抽象方法和抽象访问器。
不能用 sealed修饰符修改抽象类。
从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。抽象方法具有的特性:

抽象方法是隐式的虚方法;只允许在抽象类中使用抽象方法声明。
抽象方法声明不提供实际的实现,没有方法体;方法声明以一个分号结束,并且在签名后没有大括号 ({ })。
方法实现有一个非抽象类中重写方法实现。
在抽象方法声明不能使用static或virtual 修饰符。
在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。



虚方法

用virtual修饰
要有方法体,哪怕是一个分号
可以被子类override
除了密封类外读可以重写
抽象方法

用abstract修饰
不允许有方法体
必须被子类override
只能在抽象类中



希望对你有帮助!
回复 使用道具 举报
1. 虚函数就是没有实现的,可由子类继承并重写的函数。
2. 抽象函数就是规定其非虚子类必须实现的函数,必须被重写。
回复 使用道具 举报
虚方法是在父类中的方法,可又子类override重写该方法,实现自己的功能
而抽象类是专门用作继承的类,抽象类不能被实例化,抽象类里可以申明抽象方法,抽象类中抽象方法不提供实现,且不能用static、vartual、private修饰
抽象方法必须被继承的子类override,
回复 使用道具 举报
1. 虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项; 抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。
2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写;虚方法不是也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。 抽象方法不能声明方法实体 而虚方法可以 包含抽象方法的类不能实例化 ,而包含虚方法的类可以实例化,因为我们没有实现抽象类中所有抽象方法。
【抽象类】 abstract 修饰符可与类和方法一起使用定义抽象类的目的是提供可由其子类共享的一般形式。子类可以根据自身需要扩展抽象类。抽象类不能实例化。抽象方法没有函数体。抽象方法必须在子类中给出具体实现。
回复 使用道具 举报
1>抽象方法和虚方法的区别在于:虚拟方法有一个实现部分,并为派生类提供了覆盖该方法的选项,相反,抽象方法没有提供实现部分,强制派生类覆盖方法(否则 派生类不能成为具体类); 2>abstract方法只能在抽象类中声明,虚方法则不是; 3>abstract方法必须在派生类中重写,而virtual则不必; 4>abstract方法不能声明方法实体,虚方法则可以。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马