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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢玲 中级黑马   /  2012-12-18 10:16  /  1960 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

虚方法和抽象方法的区别??虚方法为什么不能用static修饰??

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览

虚方法的特点:
虚方法前不允许有static,abstract,或override修饰符
虚方法不能是私有的,因此不能使用private修饰符

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
static方法变成了静态方法,就跟具体的对象无关了,而虚方法是可以留给子类重写的,所以不可以。
abstract方法变成了抽象的,必须在子类重写。但是虚方法是可以在父类中有实现的,所以不可以。
override方法是在子类中重写的方法,而虚方法在子类中是可以不重写的,所以不可以。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
虚方法(Virtual)重写:
1、  方法不能用static修饰
2、  方法重写与基类的签名必须一致
3、  Virtual不能与private一起使用
抽象方法由abstract修饰,抽象方法必须存在由abstract修饰的抽象类中,抽象方法没有方法体,抽象方法必须在抽象类中。
虚方法用Virtual修饰,要有方法体,可以被子类override(重写)。
抽象方法用avstract修饰,不允许有方法体,只能在抽象类中,必须被子类override。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
抽象方法就是纯虚方法:只有定义,没有实现。private virtual foo() = 0;有抽象方法的类就是抽象类。 抽象类不能用来定义对象,必须要作为其他类的基类,并在派生类中重载抽象方法。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。重写的子类虚函数就是被覆盖了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马