java equals 的重载与复写

问题描述

public class Person { private String name; public Person(String name){ this.name = name; } public String getName() { return name; } public boolean equals(Object other) { Person person = (Person)other; System.out.println("执行复写方法");return this.name.equals(person.getName()); }public boolean equals(Person other) { System.out.println("执行重载方法"); return this.name.equals(other.getName());} }public class PersonTest { public static void main(String[] args) { Person p = new Person("李磊");Person other = new Person("陈尚"); p.equals(other);} }程序运行时调用的是参数为Person的equals方法,当将参数为Person的equals方法注释后,会调用参数为Object的方法。 为什么不是优先调用参数为Object的方法? 既然两种参数的equals方法都能被调用,那么,为什么不会报错?程序应该不知道具体调用哪一个方法才对

解决方案

Object p = new Person("李磊"); Object other = new Person("陈尚"); p.equals(other); 楼主再这样比较一下应该就明白了。
解决方案二:
Object参数的是重写父类的方法Person参数的是重载equals方法两个方法参数不一样,当然不报错,具体调用得看调用得参数,按照你的测试,你new的就是person对象,当然调用的就是equals(Person other)
解决方案三:
public boolean equals(Person other)p.equals(other);当然调这个,other是Person好不好

时间: 2024-08-30 14:43:49

java equals 的重载与复写的相关文章

java equals 方法的重载和复写

问题描述 java equals 方法的重载和复写 public class Person { private String name; public Person(String name){ this.name = name; } public String getName() { return name; } public boolean equals(Object other) { Person person = (Person)other; System.out.println("执行复

对象-Java中子类重载的问题

问题描述 Java中子类重载的问题 比如我现在又两个具有继承关系的类: 父类:Animal 子类:Dog 在父类中有一个方法eat() 在子类中,除了继承了父类的eat()方法外,我自己还写了一个eat()的重载方法:eat(String a) 然后创建对象: Animal a = new Dog(); 为什么在创建对象a后,调用eat方法时,不能调用eat(String a)方法,而只能调用eat()方法? 解决方案 我是初学者,我说说自己的理解哈.一个是eat(),一个是eat(String

对于java equals方法的疑惑。

问题描述 对于java equals方法的疑惑. String s1 = new String("123"); String s2 = new String("123"); System.out.println(s1.equals(s2)); Test t1=new Test("123"); Test t2=new Test("123"); System.out.println(t1.equals(t2)); 为何上面输出的是

java基础-JAVA equals方法被调用时字符串和对象的顺序

问题描述 JAVA equals方法被调用时字符串和对象的顺序 如图所示 equals方法中对象在前还是字符串在前? 是标准还是建议? 解决方案 一般建议是字符串在前,这样能够避免当你的对象为[null] 的时候,报空指针异常. 解决方案二: 字符串在前,避免当你的对象为[null] 的时候,报空指针异常

java equals和==的区别详解_java

大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中八大基本类型中自动变量的字面值(自动变量就是用int a = 1;这种形式来定义的变量).如果是自动变量比较值的话肯定是用==来比较,因为equals()是一个方法,所以必须由对象调用才可以用于比较.而自动变量既不是类的实例也不是类的引用所以不能用equals()方法. 2.boolean tem

java equals和=,==的区别详细介绍_java

Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类)    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基

浅谈Java方法的重载_java

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法,调用时,会根据不用的参数表选择对应的方法 比如 public class Test { void max(int a,int b) { System.out.println(a>b ? a:b); } void max(double a,double b) { System.out.println(a>b ? a:b); } public static void main(String[] args) { Test t = ne

java 函数的重载和重写实例代码_java

在java中多态分为两种编译时多态(重载)和运行时多态(重写),编译时多态又叫前绑定,运行时多态又叫后绑定. 下面用一个例子说明: public class OverloadAndOverwrite { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.print("a1.print(a1)

[Java] equals与==的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! == 是一个运算符.  equals则是string对象的方法. Java中 值类型 是存储在内存中的栈中.  而引用类型在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中.所以字符串的内容相同,引用地址不一定相同,有可能创建了多个对象. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals将此字符串与指定的对象比较.当且仅当该参数不为 null,并且是与此对象