那具体怎样可重写光碟呢?

&&&&&&&&&&&&&&&&&&
posts - 90,comments - 151,trackbacks - 8
方法的重写
&&&&&& 方法重写是实现多态机制的一种方式。
&&&&& 方法重写:例如,如果我们针对汽车、飞机、轮船等交通工具编程时,其有共同的地方,如都可以启动,我们就可以将这些共同的东西封装在一个基类中,然后在派生类中针对具体的情况重写各自的启动方法。
&&&&&& 1 要使基类方法可以被派生类重写,需要在方法的声明中加上关键字 virtual.这种方法称为虚拟方法。同进,在派生类中,重写的方法声明中加上关键字override.
&&&&&& 2对于需要在派生类中重写的方法,还可以用关键字abstract将其声明 为抽象方法,其在逻辑上类似地虚拟方法。在这里注意的是抽象类的派生类必须重写基类中的抽象方法,否则编译时会出错。
namespace ffchongxie
&&& class Class1
&&&&&&& [STAThread]
&&&&&&& static void Main(string[] args)
&&&&&&&&&&& Vehicle v = new Vehicle();
&&&&&&&&&&& Vehicle c = new Car();
&&&&&&&&&&& Vehicle p = new Plane();
&&&&&&&&&&& Console.WriteLine(v.Start());
&&&&&&&&&&& Console.WriteLine(c.Start());
&&&&&&&&&&& Console.WriteLine(p.Start());
&&& class&Vehicle
&&&&&&& public virtual string Start() // 在这个基类的方法上加上关键字virtual&就是表示这个方法可以被其子类重写
&&&&&&&&&&& return "交通工具启动!";
&&& class Car :Vehicle
&&&&&&& public override string Start()//要重写基类的方法,要在方法前加上&override关键字
&&&&&&&&&&& return "汽车起步!";
&&& class Plane : Vehicle
&&&&&&& public override string Start()
&&&&&&&&&&& return "飞机起飞!";
阅读(...) 评论()扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何理解_重写文学史_的_历史性_.pdf
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Java中重写Object类的equals方法和hashcode方法的注意事项_最牛网 & 最牛网
在重写任何类的equals方法是必须遵循以下几点:
1、对称性:如果x.equals(y)返回是&true&,那么y.equals(x)也应该返回是&true&。
2、反射性:x.equals(x)必须返回是&true&。
3、类推性:如果x.equals(y)返回是&true&,而且y.equals(z)返回是&true&,那么z.equals(x)也应该返回是&true&。&
4、还有一致性:如果x.equals(y)返回是&true&,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是&true&。
5、任何情况下,x.equals(null),永远返回是&false&;&
在重写任何类得hashcode方法是必须遵循以下几点:
1、在Java应用的同一次执行过程中,同一对象被多次调用,则他们的hashcode值必然相同。而对于同一个应用的两次不同的调用,它们的Hashcode值可以相同,也有可能不同。
2、对于两个对象来说,如果他们的equals方法比较返回true,那么这两个对象的hashcode必然相同。这也解释了为什么String类中,如果两个对象的equals方法相同,则他们的hashcode值一定相同。
3、对于两个对象来说,如果使用equals方法返回为false,则他们的hashcode的值有可能相等也可能不等,(如果不同会提高性能,因为在集合中类判断两个对象是否相等,如果其hashcode不等就直接不用判断equals方法了)
4、对于Object对象来说,不同的Object对象的hashcode是不同的,它们返回的是对象的地址,equals返回的也是对象的地址。所以在自己定义的类中如果要添加到集合对象中,最好是要重写hashcode和equals方法,不然会自动继承自Object类中的两个方法根据对象地址来判断。在重写自己定义的类时,通常是在类中的根据某个值如name.hashcode();来进行判断。
以HashSet 为例,
当我们使用HashSet时,hashCode()方法就会被得到调用,判断已经存储在集合中的对象的hashCode值是否与所增加
对象的hashCode值一致,如果&不一致&则直接加进去(不用比较equals()提高效率),如果一致,则进行equals方法的比较,如果返回true,表明
集合里面已经有这个对象,不能添加进去了。如果是false表是集合里面没有这个对象,则可以加进去。所以我们在重写hashcode()或者equals()
方法的任何一个方法时,必须重写另外一个。
自己手工写了一个类来重写这两个方法:
手工重写hashcode方法和equals方法
根据name来判断 两个对象是否相等。
上午09:09:56
* @version 1.0.0
class People {
private String name;
public People(String name){
this.name=name;
public boolean equals(Object obj) {
// TODO Auto-generated method stub
//如果是自己
if(this==obj){
return true ;
//如果是空
if(obj==null ){
return false;
//比较两个People的名字是否相同
if(obj!=null && obj instanceof People){
if(((People)obj).name.equals(this.name))
return false;
public int hashCode() {
// TODO Auto-generated method stub
//String的hashcode本来就是用来比较两个字符是否相等
name.hashCode();
其他相关问题:
& & & &那么在String中的hashcode是怎么定义的呢?在String的API中我们可以看到这样一个公式:&s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1] 使用int 算法,这里s[i] 是字符串的第i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希码为0。)这说明String 中的hashcode 返回的并不是在内存中的地址,如果两个字符串的内容相同(equals为true),则其hashcode值必然就相同,equal为true。同理经过傻蛋测试在Integer类中和String类似,hashcode方法和equals方法也是判断其包裹的原始值的内容是否相同。
总结:在Java中,String 、Math、还有Integer、Double。。。。等这些封装类重写了Object中的equals()方法,让它不再比较其对象在内存中的地址,而是比较对象中实际包含的整数的值,即比较的是内容。再强调一次,Object的equals()方法比较的是地址值,所以Object equals相等时,其hashcode必然相等,因为都是对象的地址,所以自己定义的类如果要加入到集合类中一定要记得重写这两个方法。
&&&&& 在Eclipse中重写hashcode和equals方法使相当方便的,只需要右键-&source-&Generate hashcode() and equals()便可以了。
欢迎转载,转载请注明转载地址
原创文章,转载请注明: 转载自
本文链接地址:
文章的脚注信息由WordPress的自动生成
Copyright (C)

我要回帖

更多关于 重写规则 的文章

 

随机推荐