文章目录
Object类是JDK默认提供的一个类,所有类默认继承Object类。
Object类是所有类的父类,使用Object可以接收所有类的对象。
1.取得对象信息 toString()
使用系统输出 输出对象时,默认输出的是一个编码地址(堆内存地址)
系统输出(print/println)输出对象时,默认调用对象的toString()
方法
使用系统输出输出String
常量时,输出的是字符串内容。因为:Object
类提供的toString()
有没有被类所覆写
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
//覆写toString 来输出对象信息
public String toString() {
return this.name + this.age;
}
}
public class TestObject {
public static void main(String[] args) {
fun(new Person("张三",18));
// fun(new My());
fun("hello");
}
public static void fun(Object obj) {
System.out.println(obj);
}
}
2 *****对象比较equals()
*****
“==”比较的是值是否相等(对于基本数据类型,比较的是存放数据大小;对于引用数据类型,比较的是存放地址是否相等)
用进行两个引用类型的内容比较,用equals()
,必须覆写Object
的equals()
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
//覆写toString 来输出对象信息
public String toString() {
return this.name + this.age;
}
//覆写equals 来比类的属性
public boolean equals(Object obj) {
//判断地址,如果地址相等,就是同一个对象
if (this == obj) {
return true;
}
//判断传入对象是否是由Person类实例化
if(!(obj instanceof Person)) {
return false;
}
//传入的一定是Person对象并且地址不相等
//向下转型,要比较Person的属性是否相等
//已经进行过对象的合法性校验,向下转型不会出问题
Person per = (Person) obj;
return per.name.equals(this.name) && per.age == this.age;
}
}
public class TestObject {
public static void main(String[] args) {
Person per = new Person("张三",18);
Person per1 = new Person("张三",18);
System.out.println(per.equals(per1));
}
}
3. Object
除了是所有类的父类外,Object还可以接受数组和接口。
->Object
可以接收所以引用数据类型
interface IMSG{
void print();
}
class MsgImpl implements IMSG{
private String msg =" hello world";
public void print() {
System.out.println(msg);
}
}
public class TestObject {
public static void main(String[] args) {
//面向接口编程
IMSG msg = new MsgImpl();
//接收接口
Object obj =msg;
//还原
IMSG msg1 = (IMSG)obj;
msg1.print();
}
}