JavaJava学习笔记1八(Object类)

Object类是Java中最顶层的父类,全数类都以它的子类,接口不连续它

Object类中的方法:

官方材质:boolean equals(Object obj)  提醒别的有个别对象是还是不是与此对象“相等”

示例:

package demo;

public class Person extends Object {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 重写父类的equals方法
    // 源代码相同,equals是比较两个对象的内存地址

    public boolean equals(Object obj) {
        return this == obj;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

package demo;

public class TestEquals {
    public static void main(String[] args) {
        //Person类继承了Object类,继承了父类的方法
        Person p1 = new Person("张三", 18);
        Person p2 = new Person("李四", 20);
        boolean b1 = p1.equals(p2);
        System.out.println(b1);//输出false
        p1 = p2;
        boolean b2 = p1.equals(p2);
        System.out.println(b2);//输出true

    }
}

 

可是发现比较内部存储器地址是尚未意思的,为了满足壹些供给,大家能够重写下equals方法:

 

package demo;

public class Person extends Object {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 重写父类的equals方法,自己定义比较方式
    // 比较两个对象的age是否相同

    public boolean equals(Object obj) {
        // 处理传入的是本身的情况
        if (this == obj) {
            return true;
        }
        // 处理传入空的情况
        if (obj == null) {
            return false;
        }
        // 多态中不能调用子类的特性,所以需要向下转型
        // 加入instanceof为了防止风险,因为Object是顶层父类,防止传入其他的类
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return this.age == p.age;
        } else {
            return false;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

package demo;

public class TestEquals {
    public static void main(String[] args) {
        //Person类继承了Object类,继承了父类的方法
        Person p1 = new Person("张三", 20);
        Person p2 = new Person("李四", 20);
        boolean b1 = p1.equals(p2);
        System.out.println(b1);//输出true
    }
}

 

toString方法:

法定资料:String toString() 再次来到该目的的字符串表示

持续上面的Person类写个示范:

package demo;

public class TestToString {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 18);
        String s1 = p1.toString();
        System.out.println(s1);
        System.out.println(p1);
    }
}
/*
这里两个输出相同:
demo.Person@2cdb03a1
demo.Person@2cdb03a1

所以我们发现,输入语句中如果写的是一个对象,默认调用对象的toString方法
*/

 

实则取得内部存款和储蓄器地址未有何样实际意义,为了满意1些供给,所以大家重写下toString方法:

package demo;

public class Person extends Object {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //重写父类的toString方法
    public String toString(){
        return this.name+this.age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

package demo;

public class TestToString {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 18);
        String s1 = p1.toString();
        System.out.println(s1);
        System.out.println(p1);
    }
}
/*
这里两个输出总是相同:
张三18
张三18

我们发现,输入语句中如果写的是一个对象,总是默认调用对象的toString方法
*/

 

Object还有其余方法,有个别不常用,某些会在前边提到

 

相关文章