Java自学-继承与接口 Object类

Posted 半米高峰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java自学-继承与接口 Object类相关的知识,希望对你有一定的参考价值。

Java中的超类 Object

步骤 1 : Object类是所有类的父类

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

package charactor;
 
import property.Item;
 
public class Hero extends Object {
        
    String name; //姓名
        
    float hp; //血量
        
    float armor; //护甲
        
    int moveSpeed; //移动速度
     
    public void useItem(Item i){
        System.out.println("hero use item");
        i.effect();
    }   
     
    public Hero(){
        System.out.println("Hero的无参的构造方法 ");
    }
     
    public Hero(String name){
        System.out.println("Hero的有一个参数的构造方法 ");
        this.name = name;
    }
     
    public static void main(String[] args) {
        new Hero();
    }
      
}

步骤 2 : toString()

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

package charactor;
  
public class Hero {
    public String name;
    protected float hp;
      
    public String toString(){
        return name;
    }
      
    public static void main(String[] args) {
         
        Hero h = new Hero();
        h.name = "盖伦";
        System.out.println(h.toString());
        //直接打印对象就是打印该对象的toString()返回值
        System.out.println(h);
    }
}

步骤 3 : finalize()

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

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

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

package charactor;
  
public class Hero {
    public String name;
    protected float hp;
      
    public String toString(){
        return name;
    }
     
    public void finalize(){
        System.out.println("这个英雄正在被回收");
    }
      
    public static void main(String[] args) {
        //只有一引用
        Hero h;
        for (int i = 0; i < 100000; i++) {
            //不断生成新的对象
            //每创建一个对象,前一个对象,就没有引用指向了
            //那些对象,就满足垃圾回收的条件
            //当,垃圾堆积的比较多的时候,就会触发垃圾回收
            //一旦这个对象被回收,它的finalize()方法就会被调用
            h = new Hero();
        }
 
    }
}

步骤 4 : equals()

equals() 用于判断两个对象的内容是否相同

假设,当两个英雄的hp相同的时候,我们就认为这两个英雄相同

package charactor;
  
public class Hero {
    public String name;
    protected float hp;
      
    public boolean equals(Object o){
        if(o instanceof Hero){
            Hero h = (Hero) o;
            return this.hp == h.hp;
        }
        return false;
    }
      
    public static void main(String[] args) {
        Hero h1= new Hero();
        h1.hp = 300;
        Hero h2= new Hero();
        h2.hp = 400;
        Hero h3= new Hero();
        h3.hp = 300;
         
        System.out.println(h1.equals(h2));
        System.out.println(h1.equals(h3));
    }
}

步骤 5 : ==

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

package charactor;
  
public class Hero {
    public String name;
    protected float hp;
      
    public boolean equals(Object o){
        if(o instanceof Hero){
            Hero h = (Hero) o;
            return this.hp == h.hp;
        }
        return false;
    }
      
    public static void main(String[] args) {
        Hero h1= new Hero();
        h1.hp = 300;
        Hero h2= new Hero();
        h2.hp = 400;
        Hero h3= new Hero();
        h3.hp = 300;
         
        System.out.println(h1==h2);
        System.out.println(h1==h3);
         
    }
}

步骤 6 : hashCode()

hashCode方法返回一个对象的哈希值

步骤 7 : 线程同步相关方法

Object还提供线程同步相关方法
wait()
notify()
notifyAll()

步骤 8 : getClass()

getClass()会返回一个对象的类对象

练习Object

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

答案

package property;
 
public class Item extends Object {
    String name;
    int price;
 
    public String toString() {
        return "叫做 " + name + " 的物品,其价格是 " + price;
    }
 
    public void finalize() {
        System.out.println("回收叫做 " + name + " 的物品");
    }
 
    public boolean equals(Object o) {
        if (o instanceof Item) {
            Item i = (Item) o;
            if (i.price == this.price)
                return true;
            else
                return false;
        }
        return false;
    }
 
}

以上是关于Java自学-继承与接口 Object类的主要内容,如果未能解决你的问题,请参考以下文章

Java自学-接口与继承 内部类

Java自学-接口与继承 抽象类

Java自学-接口与继承 多态

Java自学-接口与继承 super

Python自学之乐-继承的新式类与经典类

java 代码片段