Java 基础学习之 Object 类

   Object 类是 Java中最为常用的一个系统类,利用 Object 类可以实现参数统一。

1 基本作用

  1. 在 Java 中所有的类都有一个公共的父类 Object 类,一个类只要没有明显的继承一个类,则肯定是 Object 类的子类。如下两行代码的含义都是一样的:
class Person extends Object{  }
class Person {  }
  1. Object 类的主要方法如表:
序号方法名称类型描述
1public Object()构造构造方法
2public boolean equals()普通对象比较
3public int hashCode()普通取得 hash 码
4public String toString()普通对象打印时调用

2 主要方法

实例 1 代码:

package self.learn.objectdemo;

public class Demo {

}
package self.learn.objectdemo;

public class ObjectDemo01 {

	public static void main(String[] args) {
		Demo demo = new Demo();
		System.out.println("不加 toString()输出"+demo);
		System.out.println("加 toString()输出"+demo.toString());
	}
}

运行结果截图:

在这里插入图片描述
   上面的程序输出了一些地址信息,从程序的运行结果可以看出,加与不加 toString()方法最终的输出结果是一样的,也就是说输出的时候一定会调用 Object 类中的 toStrin() 方法打印内容。

实例 2 代码:应用 toString()方法取得一些内容

package self.learn.objectdemo;

public class Person{             // 定义 Person 类实现比较器
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}		
	@Override
	public String toString() {                               // 覆写 toString() 方法
		//return "Person [name=" + name + ", age=" + age + "]";
		return "姓名:"+this.name+";年龄:"+this.age;
	}    	
}
package self.learn.objectdemo;

public class ObjectDemo01 {

	public static void main(String[] args) {
		Person person = new Person("李白", 18);
		System.out.println("对象的信息"+person);
		
	}
}

运行结果截图:

在这里插入图片描述
   程序中的 Person 类中的 toString()方法,这样直接输出对象的时候调用的是被子类覆写过的 toString()方法。equals()方法的主要功能是用于对象的比较。

Object 类提供的 equals()方法默认是比较地址
   在 Object 中的 equals()方法实际上也是可以使用的,但是其默认使用的是按地址进行比较,并不能对内容进行比较。

实例 3 代码:对象的比较操作

package self.learn.objectdemo;

public class Person{             // 定义 Person 类实现比较器
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}		
	
	@Override
	public boolean equals(Object obj) {  //覆写 Object 类中的 equals()方法
		if(this == obj) {                // 如果两个对象的地址相等,则肯定是同一个对象
			return true;
		}
		if(!(obj instanceof Person)) {   // 判断传递进来对象是否是 Person 实例
			return false;                // 如果不是,则直接返回 false
		}
		Person per = (Person)obj;        // 将传递进来的对象向下转型
		if(per.name.equals(this.name)&&per.age == this.age) {
			return true;
		}else {
			return false;
		}
	}
	@Override
	public String toString() {                               // 覆写 toString() 方法
		//return "Person [name=" + name + ", age=" + age + "]";
		return "姓名:"+this.name+";年龄:"+this.age;
	}    	
}

运行结果截图:

在这里插入图片描述
   在 Person 类中覆写了 equals()方法,首先判断传递进来的对象与当前对象的地址是否相等,如果相等,则肯定是同一个对象,因为在 equals() 方法传递的参数是 Object 类型,所以任何对象都可以接收,这样在对象进行向下转型之前就必须判断,判断传递进来的对象是否是 Person 实例,如果不是,则直接返回 false;如果是,则将各个属性依次进行判断。
   在编写测试方法的时候,为了测试程序的合理性,传入了一个字符串类型的对象,从结果中可以清楚的看见,因为字符串不是 Person 类型,所以直接返回了 false。

3 接收任意引用类型的对象

   既然 Object 类是所有对象的父类,则肯定所有对象都可以向 Object 进行转换,在这其中也包含了数组和接口类型,即一切的引用数据类型都可以用 Object 进行接收。

实例 4 代码:使用 Object 接收接口实例

package self.learn.objectdemo;

public interface A {          // 定义接口 A
	public String getInfo();  // 定义抽象方法
}

package self.learn.objectdemo;

public class B implements A {     // 子类实现接口
	@Override
	public String getInfo() {		
		return "Hello World!";
	}
}
package self.learn.objectdemo;

public class ObjectDemo01 {
	public static void main(String[] args) {
		A a = new B();              // 为接口实例化
		Object obj = a;             // 对象向上转型
		A x = (A)obj;               // 对象向下转型
		System.out.println(x.getInfo());
	}
}

运行结果截图:

在这里插入图片描述
   通过上面的代码可以发现,虽然接口不能继承一个类,但是依然是 Object 类的子类,因为接口本身是引用数据类型,所以可以向上转型。
   同理,也可以使用 Object 接收一个数组,因为数组本身也是引用数据类型。

实例 5 代码:使用 Object 接收数组

package self.learn.objectdemo;

public class ObjectDemo01 {
	public static void main(String[] args) {
		int temp[] = {1,3,5,7,0};          // 定义数组
		Object obj = temp;                 // 使用 Object 接收数组
		Print(obj);
	}
	public static void Print(Object o) {   // 接收一个对象
		if(o instanceof int[]) {           // 判断对象类型
			int x[] = (int [])o;           // 向下转型
			for(int i = 0; i < x.length; i++) { // 循环输出
				System.out.print(x[i]+"、");
			}
		}		
	}
}

运行结果截图:

在这里插入图片描述
   上面的程序使用 Object 接收一个整型数组,因为数组本身属于引用数据类型,所以可以使用 Object 接收数组内容,在使用 Print() 方法输出的时候通过 instanceof 判断类型是否是一个整型数组,然后进行输出。

Object 类在实际开发中的作用
   因为 Object 类可以接收任意的引用数据类型,所以在很多类库设计上都采用了 Object 作为方法参数,这样操作起来会比较方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值