Virtual
虚函数是多态的前提和保证
被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。
没有标注为virtual的非虚方法,在继承类中虽然不能通过override重写方法,但是也可以声明一个同名方法的,不过不具备多态的性质!
有两个类如下:
public class SuperClass
{
public void Display()//not virtual
{
Console.WriteLine(“I’m super”);
}
public virtual void Vdisplay()
{
Console.WriteLine(“I’m superVVV!!!”);
}
}
public class LowerClass : SuperClass
{
public void Display()//new public void Display();和父类中的方法同名,却不具备多态的性质
{
Console.WriteLine(“i’m lower”);
}
public override void Vdisplay()//重写了父类中的方法
{
Console.WriteLine(“I’m lowerVVV”);
}
}
主函数及输出如下:
http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html
static void Main(string[] args)
{
//这里一切正常
LowerClass l = new LowerClass();
l.Display(); //输出:I’m lower
l.Vdisplay();//输出:I’m lowerVVV
//问题在下面:
SuperClass s = new LowerClass();
s.Display(); //输出:I’m super (!!!注意:此处并没有多态的影子,而是直接调用了父类SuperClass的Display()方法)
s.Vdisplay();//输出:I’m lowerVVV
}
Abstract
abstract抽象方法则更像是一个接口(Interface)方法
被标注为abstract的方法不能有具体的实现!
而且如果有方法被标注为abstract, 则这个类需要被标注为abstract
具体关于virtual 和 abstract的区别可以参看:http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html
分类目录
- arch/management (17)
- computer (38)
- java/j2ee (305)
- lnmpa (237)
- mac/iphone/ipad/android (11)
- mysql/oracle/postgresql (126)
- os/software (74)
- other (518)
- python (6)
- redis/memcached/mongo (31)
- sitebuild (143)
随便看看
标签云
程序员 创业 人生箴言 eclipse 快捷键 术语 索引 unix命令 vim wordpress java学习笔记 环境变量 oracle内置函数 index 人生 数据类型 nohup tuxedo mysql学习笔记 MS-DOS命令 servlet spring 职场进阶 职业进阶 服务器选购 服务器选型 apache JPA MongoDB 注解 tomcat 子女教育 jquery maven JVM aix命令 网络营销 java异常 seo 人生规划 关键字 css 网络推广 struts 系统优化 成长 frame iframe bluehost jdbc select 我的信仰 oracle函数 cookie HashMap 站长工具 乱码 ArrayList secureCRT jsp session tail find halt 事务 oracle单记录函数 算法 URL window table javascript操作表单元素 String 字符串处理 健康 http 域名 情感 more google A记录 域名解析 netstat 弹出对话框 弹出窗口 框架集 框架 excel 字符串 javascript函数 showModalDialog nginx number 数组 sql frameset 开源程序 java数组 软件 oracle服务友情链接
收藏链接