Object类
Object类是jdk默认提供的一个类,Java中除了Object类,所有类都存在继承关系,默认会继承Object父类。即所有类都是Object类的子类。
Object展现了最高的参数统一化——所有类的对象都可以使用Object进行接收。
一、Object类中两个重要的方法
1.toString()——取得对象信息
class Test{
public static void main(String[] args) {
fun(new Person("张三",25) );
}
public static void fun(Object obj) {
System.out.println(obj.toString());
}
}
class Person{
private String name ;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}//输出 Person@3b192d32
通过以上代码发现,Object类中的toString()方法只是简单输出当前所引用的类名称以及对象地址。(而这是所有对象都共同具备的特征)。如若觉得默认给出的toString()方法功能不足,就在需要的子类上覆写toString()方法。
class Test{
public static void main(String[] args) {
fun(new Person("张三",25) );
}
public static void fun(Object obj) {
System.out.println(obj.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 "姓名:"+name + " 年龄:"+age;
}
}//输出 姓名:张三 年龄:25
2.equlas()——对象比较
class Test{
public static void main(String[] args) {
Person per1 = new Person("张三",20);
Person per2 = new Person("张三",20);
System.out.println(per1.equals(per2));
}
}
class Person{
private String name;
private int age;
public Person(String name,int age){
this.age = age;
this.name = name;
}
@Override
public boolean equals(Object obj) {
//1.首先判断obj是否是Person类对象
if(!(obj instanceof Person)){
return false;
}
//2.判断当前对象是否和传入对象地址相同
if(this == obj){
return true;
}
//3.obj确实是Person类对象,比较两者属性内容
//向下转型取得Person的属性值
Person per = (Person) obj;
return ((this.name.equals(per.name) && this.age == per.age));
}
}
二、接收引用数据类型
在之前已经分析了Object可以接收任意的对象,因为Object是所有类的父类,但是Obejct并不局限于此,它可以接
收所有数据类型,包括:类、数组、接口。
使用Object来接受数组对象:
public class Test {
public static void main(String[] args) {
// Object接收数组对象,向上转型
Object obj = new int[]{1,2,3,4,5,6} ;
// 向下转型,需要强转
int[] data = (int[]) obj ;
for(int i :data){
System.out.println(i+"、");
}
}
}
使用Object接收接口对象:
interface IMessage {
void getMessage();
}
class MessageImpl implements IMessage {
@Override
public String toString() {
return "Hello" ;
}
@Override
public void getMessage() {
System.out.println("World");
}
}
public class Test {
public static void main(String[] args) {
IMessage msg = new MessageImpl(); // 子类向父接口转型
Object obj = msg; // 接口向Obejct转型
System.out.println(obj);
IMessage temp = (IMessage) obj; // 强制类型转换
temp.getMessage();
}
}
Object真正达到了参数的统一,如果一个类希望接收所有的数据类型,就是用Object完成。