当前位置:编程学习 > JAVA >>

有没有JAVA达人,问题都问一天了,也没人给个权威点的答复

object类是所有类的父类,那么string也继承于object类,因为object类存在着eqauls方法是与==相同,所以string重写了object类里的eqauls方法使其能判断是否相等,父类的eqauls方法改变,因为所以string重写了object类里的eqauls方法,当创建新类的时候用eqauls还是调用object里未被重写的eqauls方法,这是为什么呢?
追问:为啥那个是假,既然String a = "abc“ 那么想当于以"abc“ 为参数创建String 对象,但是String 里面对equals方法进行了重写,又因为String 是object的继承类,所以想当于重写父类中的equals方法,也就是重写了object类里的equals,应该把原有object类的equals覆盖了,那为什么再创建新类时候调用的不是被String 覆盖了的那个equals呢?string里的equals不是已经把OBJECT里面的equals重写了吗,也就是所说的覆盖,当别的类再调用equals时不应该是覆盖后那个经过string重写的那个equals吗这和在哪学的有关系么?你这种情况下
String a = "ss";时候就相当于创建了String对象,在创建的一瞬间不就是对object里的equals进行重写了吗?
答案:你好,有这种专研的精神很好。
你这句话“父类的eqauls方法改变,因为所以string重写了object类里的eqauls方法”比较难以理解。
那么所有的String实例对象调用equals方法的时候,都是调用String自己的equals方法。
而那么没有重写equals方法的类,使用equals的时候,还是调用父类中的equals方法。
举个例子:
String a = "abc“ ;
String b = "abc" ;
a.equals(b) ; //返回true ;
假如你新创建了一个类Person,没有重写equals方法:
Person p1 = new Person("张三") ;
Person p2 = new Person("张三") ;

p1.equals(p2); //这里返回false
其他:看数据类型是什么啊,object类型则是调用父类里的函数equals(),如果是String,StringBuffer。。。,这些类里重写了equals(),在调用equals()用多态来调用,
建议去读读源代码,ctrl+左键 一个是类,一个是对象,类是用来描述对象的,新建对象时候会在堆内存中开辟一块空间,以类为模版。对象最后调用的是自身的方法了。类和类之间才有重载覆盖的说法吧,对象和对象,对象和类之间没有这种说法,好比关公战秦琼,两个时代的人,比武谁厉害?谁也不知道。 

上一个:代码: HashMap<String,Object> map = new HashMap(); map.put("user",user); map.put("foods",foods);
下一个:button onclick 为什么失效 jsp

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,