2018-03-06学习小结 - 关于类的专题研究1

回顾

13.2.5 接口的作用——代理设计模式(Proxy)

13.3 抽象类和接口对比

13.4 点拨

习题

学习小结

14 关于类的专题研究

14.1 众类鼻祖——Object类

Java中所有类从根本上都继承Object类。Object类是Java类层中的最高层类,是所有类的超类。

public class Person { // 当没有指定父类时,会默认Object类为其父类
···
}

等价于

public class Person extends Object {
···
}

2018-03-06学习小结 - 关于类的专题研究1_第1张图片
Object常用方法1
Object常用方法2

14.1.1 取得对象信息:toString()

在打印对象时被调用,将对象信息变成为字符串返回。

范例14-1:Object类的使用

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月6日 下午10:24:04
 * @Description TODO Object类的使用
 */
public class P353_14_1 {

    public static void main(String[] args) {
        Person24 p = new Person24();
        System.out.println(p);
        System.out.println(p.toString());
    }

}

class Person24 extends Object {
    String name = "张三";
    int age = 25;
}

运行结果:

2018-03-06学习小结 - 关于类的专题研究1_第2张图片
运行结果

范例14-2:覆写Object类的方法

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月6日 下午10:42:13
 * @Description TODO 覆写Object类的方法
 */
public class P354_14_2 {

    public static void main(String[] args) {
        Person25 p = new Person25();
        System.out.println(p);
    }

}

class Person25 extends Object {
    String name = "张三";
    int age = 25;

    // 覆写Object类中的toString()方法
    public String toString() {
        return "我是:" + this.name + ",今年:" + this.age + "岁";
    }
}

运行结果:

2018-03-06学习小结 - 关于类的专题研究1_第3张图片
运行结果

14.1.2 对象想等判断方法:equals()

用于比较是否想等,必须被覆写。

范例14-3:没有覆写Object类中的equals方法

package com.Javastudy2;

/**
 * @author YangWang
 * @date 2018年3月6日 下午10:52:03
 * @Description TODO 没有覆写Object类中的equals方法
 */
public class P355_14_3 {

    public static void main(String[] args) {
        Person26 p1 = new Person26("张三", 25);
        Person26 p2 = new Person26("张三", 25);
        // 判断p1和p2的内容是否想等
        System.out.println(p1.equals(p2) ? "是同一个人!" : "不是同一个人!");
    }

}

class Person26 {
    private String name;
    private int age;

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

运行结果:

2018-03-06学习小结 - 关于类的专题研究1_第4张图片
运行结果

实际比对两个对象的内存地址。

范例14-4:equals方法的覆写

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月6日 下午11:00:36
 * @Description TODO equals方法的覆写
 */
public class P356_14_4 {

    public static void main(String[] args) {
        Person27 t_p1 = new Person27("张三", 25);
        Person27 t_p2 = new Person27("张三", 25);
        // 判断p1和p2的内容是否想等
        System.out.println(t_p1.equals(t_p2) ? "是同一个人!" : "不是同一个人");
    }

}

class Person27 {
    private String name;
    private int age;

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

    // 覆写父类(Object类)中的equals方法
    public boolean equals(Object o) {
        boolean temp = true;
        // 声明一p1对象,此对象实际上就是当前调用equals方法对象
        Person27 p1 = this;
        // 判断Object类对象是否是Person的实例
        if (o instanceof Person27) {
            // 如果是Person类实例,则向下转型
            Person27 p2 = (Person27) o;
            // 调用String类中的equals方法
            if (!(p1.name.equals(p2.name) && p1.age == p2.age)) {
                temp = false;
            }
        } else {
            // 如果不会person类的实例,则直接返回false
            temp = false;
        }
        return temp;
    }
}

运行结果:

2018-03-06学习小结 - 关于类的专题研究1_第5张图片
运行结果

思考

Object类是所有类的父亲,有意思。


记于2018年3月6日23:20:30
Yvan

你可能感兴趣的:(2018-03-06学习小结 - 关于类的专题研究1)