回顾
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 {
···
}
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;
}
运行结果:
范例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 + "岁";
}
}
运行结果:
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;
}
}
运行结果:
实际比对两个对象的内存地址。
范例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;
}
}
运行结果:
思考
Object类是所有类的父亲,有意思。
记于2018年3月6日23:20:30
Yvan