您的位置:首页 > 编程语言

一个查看源代码的问题

2015-08-31 09:58 435 查看
代码如下:

package java1;

import java.util.Set;

import java.util.HashSet;

class Person 

{

private String name;

private int age;

public Person(String name ,int age)

{

this.name=name;

this.age=age;

};

public String toString()

{

return "姓名:"+this.name+";年龄"+this.name;

}

public boolean equals(Object obj)

{

if(this==obj)

{

return true;

}

if(!(obj instanceof Person))

{

return false;

}

Person p=(Person) obj;

if(this.name.equals(p.name)&&this.age==p.age)

{

return true;

}

else

{

return false;

}

}

public int hashCode()

{

return this.name.hashCode()*this.age;

}

}

public class nicai{

public static void main(String args[])
{
Set<Person> allset=new HashSet<Person>();
allset.add(new Person("张三",30));
allset.add(new Person("李四",31));
allset.add(new Person("王五",32));
allset.add(new Person("王五",32));
allset.add(new Person("王五",32));
allset.add(new Person("赵六",33));
allset.add(new Person("孙七",33));
System.out.println(allset);

}

}

代码的本身没问题,我思考的是代码中是怎么调用equal()方法以及hashCode方法的,于是就去查看add的源代码,我先点击allset.add(new Person)的add源代码发现只是跳转到了 boolean add(E e);并没有它的源码,刚开始我怀疑是我的编辑器打不开源码,后来发现,allset是Set类,HashSet是Set的子类,Set<Person> allset=new HashSet<Person>()这条语句把allset实例化为Set的一个子类也就是HashSet的一个对象,那就是说allset.add调用的方法当然是在HashSet()类中覆写过得方法,所以应该去寻找HashSet类中的add方法,果然找到了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: