2018/01/08JAVA 基础 / 接口与继承/Object类——[思考?question:Object类的方法有什么用?为什么不直接在类中设计方法?
声明一个类的时候,默认是继承了Object 。例如public class Hero extends Object。
Object的方法有
toString()、finalize()、equals()、hashCode()、线程同步相关方法、getClass()
Object方法的作用
Object方法的作用请看下面代码的注释:
1 package test; 2 3 public class Item { 4 5 String name; 6 7 int price; 8 9 public String toString(){ 10 11 return "叫做 " + name + " 的物品,其价格是 " + price; 12 } 13 14 public void finalize(){ 15 System.out.println("当前对象" + name + "正在被回收"); 16 } 17 18 public boolean equals(Object o){ 19 if (o instanceof Item) { 20 Item t = (Item)o; 21 return t.price == this.price; 22 } 23 return false; 24 } 25 26 public static void main(String[] args) { 27 28 Item h = new Item(); 29 h.name = "garen"; 30 h.price = 13; 31 32 Item h2 = new Item(); 33 h2.name = "modit"; 34 h2.price = 130; 35 /** 36 * 第40行可以省略 37 * ∵通过 41行System.out.println打印对象h就是打印该对象的toString()返回值 38 * 优点1、可见,不需要有很清晰写出引用调用方法就可以实现打印 39 */ 40 //System.out.println(h.toString()); 41 System.out.println(h); 42 /** 43 * 同理第45~47行调用回收方法也不需要有很清晰写出引用调用方法 44 */ 45 for (int i = 0; i < 80000; i++) { 46 h = new Item(); 47 } 48 /** 49 * Object类中的equals方式默认的是判断引用是否指向同一个对象,故可以在子方法Hero中重写该方法 50 * 第52行是比较的两个引用所指向的对象的内容是否一致 51 */ 52 System.out.println(h.equals(h2)); 53 } 54 55 }
综上,相较于其他父类,Object类的方法的优势体现在:
通过子类Hero对父类Object的重写,可以不需要直接调用Hero重写的方法,就能实现预期效果。
自然地,类Hero在某些方法上【比如tostring方法】就没必要另行自主设计了,但是涉及到其他方法时是否就不一定呢?由于目前还没有这方面的经验,这是值得思考的。