源代码如下:
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public boolean equals(Person p){
return this.getName().equals(p.getName())&&this.getAge()==p.getAge();
}
}因为每个类都继承自Object,所以每个类都有equals()方法,但Object的equals()方法参数为Object,而我自己重载的equals方法的参数Person也继承自Object,那当我调用equals方法的时候,会调用那个?
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public boolean equals(Person p){
return this.getName().equals(p.getName())&&this.getAge()==p.getAge();
}
}因为每个类都继承自Object,所以每个类都有equals()方法,但Object的equals()方法参数为Object,而我自己重载的equals方法的参数Person也继承自Object,那当我调用equals方法的时候,会调用那个?
如果是重写的话,就是覆盖该方法,以后子类调用该方法都是自己的。
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public boolean equals(Person p){
return this.getName().equals(p.getName());
}
}
class Students extends Person{
public Students(String name,int age){
super(name,age);
}
public boolean equals(Students s){
return !this.getName().equals(s.getName());
}
}
class OverrideTest{
public static void main(String[] args){
Person p=new Students("zhangsan",18);
Person q=new Students("zhangsan",19);
System.out.println(p.equals(q));
Person p1=new Students("zhangsan",18);
Students q1=new Students("zhangsan",19);
System.out.println(p1.equals(q1));
Students p2=new Students("zhangsan",18);
Students q2=new Students("zhangsan",19);
System.out.println(p2.equals(q2));
Students p3=new Students("zhangsan",18);
Person q3=new Students("zhangsan",19);
System.out.println(p3.equals(q3));
}
}