Object:
Object是不断抽取而来的,具备所有对象的共性内容,是所有类的根类。
常用的共性功能:
1 equals方法:
class Person extends Object{
private int age;
Person(int age){
this.age=age;
}
/*
//比较Person的年龄,是否是同龄人
public boolean compare(Person p){
return this.age==p.age;
}
*/
/*equals方法覆盖 开发的时候经常用
一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
*/
public boolean equals(Object obj)//Object obj=p2{
{
if(obj instanceof Person){
//return flase
throw new ClassCastException("类型错误");
}
Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
return this.age==p.age;
}
}
class Demo{}
public class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person(20);
Person p2=new Person(20);
Person p3=p1;
Demo d=new Demo();
System.out.println(p1==p2);
System.out.println(p1==p3);
System.out.println(p1.equals(p2));//比较的是地址,是否指向同一个对象
System.out.println(p1.equals(p3));
System.out.println(p1.equals(d));
}
}
运行:
2 hashCode方法:(重点:结构体会用)
当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
class Person extends Object{
private int age;
Person(int age){
this.age=age;
}
public boolean equals(Object obj)//Object obj=p2{
{
if(obj instanceof Person){
//return flase
throw new ClassCastException("类型错误");
}
Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
return this.age==p.age;
}
public int hashCode(){
return age;
}
}
class Demo{}
public class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person(20);
Person p2=new Person(20);
Person p3=p1;
Demo d=new Demo();
System.out.println(p1);
System.out.println(p1.hashCode());
System.out.println(Integer.toHexString(p1.hashCode()));
}
}
运行:
3 getClass:
系统自带的类Class里的方法,在主函数中添加代码:
Class clazz1=p1.getClass();
Class clazz2=p2.getClass();
System.out.println(clazz1==clazz2);
System.out.println(clazz1.getName());
运行:
get的Name就是编译类Person后得到的Person.class字节码文件的Name。
4 toString方法:
class Person extends Object{
private int age;
Person(int age){
this.age=age;
}
public boolean equals(Object obj)//Object obj=p2{
{
if(obj instanceof Person){
//return flase
throw new ClassCastException("类型错误");
}
Person p=(Person) obj;
return this.age==p.age;
}
}
class Demo{}
public class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person(20);
Person p2=new Person(20);
Person p3=p1;
Demo d=new Demo();
System.out.println(p1);
System.out.println(p1.getClass().getName()+"$"+Integer.toHexString(p1.hashCode()));
}
}
运行:
在Person中添加方法:
public String toString(){//System.out.println(p1);主函数中会默认调用toString
return "Person :"+age;
}
运行:
在开发中,像Person这种类似于数据模型的类,就是说这种类会产生n多对象(学生那,工人那...),他们里边通常都会覆盖equals、hashCode、toString方法。
网友评论