• 接口与继承系列教材 (七)- Java中的超类 Object


    Object类是所有类的父类

    步骤1:Object类是所有类的父类
    步骤2:toString()
    步骤3:finalize() 
    步骤4:equals()
    步骤5:==
    步骤6:hashCode()
    步骤7:线程同步相关方法
    步骤8:getClass()
    步骤9:练习-Object
    步骤10:答案-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方法返回一个对象的哈希值,但是在了解哈希值的意义之前,讲解这个方法没有意义。

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

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

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

    步骤 8 : getClass()

    getClass()会返回一个对象的类对象,属于高级内容,不适合初学者过早接触,关于类对象的详细内容请参考反射机制


    更多内容,点击了解: https://how2j.cn/k/interface-inheritance/interface-inheritance-object/312.html

  • 相关阅读:
    Spring MVC源码——Root WebApplicationContext
    ThreadPoolExecutor 源码阅读
    Spark RDD
    HashMap 源码阅读
    不定期更新的IDEA功能整理
    Jvm内存区域和GC
    装饰模式和Java IO
    spring websocket集群问题的简单记录
    Kotlin in Action 笔记
    WebSphere部署Spring Boot
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615541.html
Copyright © 2020-2023  润新知