• 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调用的。
    finalize()

    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;
        }
     
    }
  • 相关阅读:
    C#与数据库访问技术总结(十四)之DataAdapter对象
    《运维三十六计》:运维生存宝典
    企业运维几百个重点面试题汇总(老男孩)
    5、KVM虚拟化典型案例:生产环境问题案例与分析
    Linux运维必会的实战编程笔试题(19题)
    面试中常见的 MySQL 考察难点和热点
    Linux系统运维常见面试简答题(36题)
    一键备份脚本 backup.sh
    Linux常用的200个命令总结分类
    2、KVM虚拟化CPU、内存、网络、磁盘技术及性能调优方法
  • 原文地址:https://www.cnblogs.com/jeddzd/p/11532236.html
Copyright © 2020-2023  润新知