- Object类简介
Object是Java默认提供的一个类。Java里面除了Object类,所有的类都存在继承关系。默认会继承Object父类。即,所有的类都可以使用Object进行接收。
如:使用Object接收类对象
class Person{}
class Student{}
public class Test{
public static void main(String[] args) {
fun(new Person());
fun(new Student());
}
public static void fun(Object obj){
System.out.println(obj);
}
}
- 获取对象信息
在使用对象输出时,默认输出的是一个地址编码。如果使用的是String类,则会输出对象的内容,就是因为String类覆写了Object的toString()
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Test{
public static void main(String[] args) {
Person person = new Person("张三",18);
fun(person);
}
public static void fun(Object obj){
System.out.println(obj.toString());
System.out.println(obj); // 默认覆写了toString
}
}
- 对象比较
String类对象的比较使用的是equals(),实际上String类的equals()就是覆写Object类中的equals()方法。
// 实现对象比较
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
if(obj == null){
return false;
}
if(this == obj){
return true;
}
if(!(obj instanceof Person)){ //不是Person类对象
return true;
}
//向下转型,取得Person类的name和age属性
Person per = (Person) obj;
return per.name.equals(this.name) && (per.age == this.age);
}
}
public class Test{
public static void main(String[] args) {
Person per1 = new Person("张三",18);
Person per2 = new Person("张三",19);
Person per3 = new Person("李四",18);
Person per4 = new Person("张三",18);
System.out.println(per1.equals(per2));
System.out.println(per1.equals(per3));
System.out.println(per1.equals(per4));
}
}
- 接收引用数据类型
Object不但可以接收任意的对象,它其实可以接收所有数据类型,包括:类、数组、接口。
// Object接收数组对象
public class Test{
public static void main(String[] args) {
Object obj = new int[]{1,2,3,4,5};
//向下转型 强制转换
int[] data = (int[]) obj;
for(int i = 0; i < data.length; i++){
System.out.println(data[i]);
}
}
}
Object可以接收接口是Java中的强制要求,因为接口本身不能继承任何类。
interface IMessage{
public void getMessage();
}
class MessageImpl implements IMessage{
public void fun(){
System.out.println("hello world");
}
@Override
public void getMessage() {
System.out.println("hello java");
}
}
public class Test{
public static void main(String[] args) {
IMessage msg = new MessageImpl(); //子类向父接口转型
Object obj = msg; //接口向Object转型
System.out.println(obj);
IMessage temp = (IMessage) obj; //强制类型转换
temp.getMessage();
}
}