JAVA -- 接口与继承(七) Object类

Object类是所有类的父类

声明一个类的时候,默认是继承了Object

public class Hero extends Object

toString()

Object类提供一个toString方法,所以所有的类都有toString方法
toString()的意思是返回当前对象的字符串表达
通过 System.out.println 打印对象就是打印该对象的toString()返回值

package charactor;

public class test extends Object{
    
    
	String name;
	public String toString() {
    
    
		return name;
	}
	public static void main(String args[]) {
    
    
		test a  = new test();
		a.name = "德玛";
		System.out.println(a.toString());
		System.out.println(a);
	}
}

finalize()

当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件

当它被垃圾回收的时候,它的finalize() 方法就会被调用。

finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。

package charactor;

public class test extends Object{
    
    
	String name;
	public String toString() {
    
    
		return name;
	}
	public static void main(String args[]) {
    
    
		test b;
		for(int i = 0;i<100000;i++) {
    
    
			b  = new test();
		}
	}
	public void finalize() {
    
    
		System.out.println("这个对象正在被回收!!!");
	}
}

equals()

package charactor;

public class test extends Object{
    
    
	String name;
	int hp;
	public String toString() {
    
    
		return name;
	}
	public static void main(String args[]) {
    
    
		test a = new test();

		a.hp = 100;
		test b = new test();

		b.hp = 100;
		
		System.out.println(a.equals(b));
	}
	public boolean equals(Object o) {
    
    
		if (o instanceof hero) {
    
    
			hero h = (hero) o;
			return this.hp==h.hp;
		}
		return false;
	}
}

==

这不是Object的方法,但是用于判断两个对象是否相同
更准确的讲,用于判断两个引用,是否指向了同一个对象

	public static void main(String args[]) {
    
    
		test a = new test();
		a.hp = 100;
		test b = new test();
		b.hp = 100;
		test c = a;
		System.out.println(a==b);
		System.out.println(a==c);

	}

hashCode()

hashCode方法返回一个对象的哈希值,但是在了解哈希值的意义之前,讲解这个方法没有意义。

hashCode的意义,将放在hashcode 原理章节讲解

线程同步相关方法

Object还提供线程同步相关方法
wait()
notify()
notifyAll()
这部分内容的理解需要建立在对线程安全有足够的理解的基础之上,所以会放在线程交互 的章节讲解

getClass()

getClass()会返回一个对象的类对象,属于高级内容
这里也不讲解

练习-Object⭐⭐
重写Item的 toString(), finalize()和equals()方法
toString() 返回Item的name + price
finalize() 输出当前对象正在被回收
equals(Object o) 首先判断o是否是Item类型,然后比较两个Item的price是否相同

解答:

package charactor;

public class test extends Object{
    
    
	String name;
	int price;
	public String toString() {
    
    
		String tag = name + price;
		return tag;
	}
	public void finalize() {
    
    
		System.out.println("正在回收");
	}
	public boolean equals(Object o) {
    
    
		if(o instanceof test) {
    
    
			test h = (test) o;
			return this.price==h.price;
		}
	return false;
	}
	public static void main(String args[]) {
    
    
		test a = new test();
		a.name = "德玛西亚";
		a.price = 100;
		
		test b = new test();
		b.name = "锐雯";
		b.price = 100;
		
		System.out.println(a.equals(b));
	}
}

猜你喜欢

转载自blog.csdn.net/qq_17802895/article/details/108577333