【2】java之object类

一、Object 类的基本定义

​ Object 类是所有类的父类,最大的一个好处就是:利用 Object 类可以接收所有类的对象(向上自动转型)。如果不确定参数类型,使用 Object 类型是最好的选择。

为什么 Object 类里要定义一个无参构造方法。因为 Object 类是所有类的父类,所有对象实例化的时候,构造方法一定要默认调用父类的无参构造。

从严格意义上来讲(一般不遵守),任何一个简单 java 类都应该覆写 Object 类中的如下 个方法:

  • public String toString() :取得对象信息;
  • public boolean equals(Object obj):对象比较;
  • public int hashCode() 取得对象 hash 码。

1.1 取得对象信息:toString()

class Book{}
public class TestDemo{
	public static void main(String args[]){
		Book book = new Book();
		System.out.println(book);
		System.out.println(book.toString());
		String h = "Hello";
		System.out.println(h);
	}
}

​ 发现直接输出对象与输出对象调用 toString() 方法的功能一样。在进行对象输出时,输出操作会自动调用对象的 toString() 方法将对象变成字符串后再输出,而默认情况下 Object 类中的 toString()为了适应于所有对象的输出,只输出了对象的编码。如果有需要,可以自己根据实际情况来覆写此方法。

范例:覆写 toString() 方法。

class Book{
	private String title;
	private double price;
	public Book(String title,double price){
		this.title = title;
		this.price = price;
	}
	public String toString(){
		return "书名:" + this.title + ",价格:" + this.price;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Book book = new Book("Java",79.9);
		System.out.println(book);
		System.out.println(book.toString());
	}
}

直接输出对象就调用了 toString() ,等于输出对象的时候代码又节约了。

1.2 对象比较:equals(Object obj)

范例:equals(Object obj) 方法

class Book{
	private String title;
	private double price;
	public Book(String title,double price){
		this.title = title;
		this.price = price;
	}
	public String toString(){
		return "书名:" + this.title + ",价格:" + this.price;
	}
	public boolean equals(Object obj){
      	if(obj == null){
			return false;
		}
		if(obj == this){
			return true;
		}
		if(obj instanceof Book){
          	Book book = (Book) obj;
			if(this.title.equals(book.title) && book.price == this.price){
			return true;
		}else{
              return false;
            }		
	}
}
public class TestDemo{
	public static void main(String args[]){
		Book book = new Book("Java",79.9);
		Book book2 = new Book("Java",79.9);
		String string = "hello";
		System.out.println(book.equals(book2));
		System.out.println(book.equals(string));
	}
}

1.3 Object 类可以接收一切引用数据类型

Object 类是所有类的父类,所以 Object 类可以接收所有类的对象,而且还可以接收 数组 和 接口对象。

范例:Object 对象接收数组对象

public class TestDemo{
	public static void main(String args[]){
		Object obj = new int[]{1,2,3};
		int[] data = (int[]) obj;
		for(int i=0; i<data.length; i++){
			System.out.println(data[i]);
		}
	}
}

范例:Object 对象接收接口对象

interface A{
	public void fun();
}
class B implements A{
	public void fun(){
		System.out.println("B 覆写fun()");
	}
}
public class TestDemo{
	public static void main(String args[]){
		A a = new B();
		Object obj = a;
		A aa = (A) obj;
		aa.fun();
	}
}
posted @ 2022-06-17 12:04  才华充电中  阅读(75)  评论(0编辑  收藏  举报