• Java之Object类与instanceof关键字


    Object类是所有类的父类:

    我们上下代码:

     1 package com.learn.chap03.sec14;
     2 
     3 public class A { // 上面类A继承了Object类,因此又可这样定义: public class A extends Object{
     4     /**
     5      * object类是所有类的父类
     6      */
     7     public A(){
     8         super();
     9     }
    10 }

    我们可以通过多态,利用重写Object类常用的toString()和equals(Object obj)方法,来完成我们自己的逻辑。

     1 package com.learn.chap03.sec14;
     2 
     3 public class People {
     4     private String name;
     5     
     6     /**
     7      * 构造方法
     8      * @param name
     9      */
    10     public People(String name) {
    11         this.name = name;
    12     }
    13     
    14     public String getName() {
    15         return name;
    16     }
    17     
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21     
    22     /**
    23      * 重写了Object类的toString()方法
    24      */
    25     @Override
    26     public String toString() {
    27         return this.getName();
    28     }
    29     
    30     /**
    31      * 重写了Object类的equals(Object obj)方法
    32      */
    33     @Override
    34     public boolean equals(Object obj) {
    35         String name = ((People)obj).getName();
    36         return this.name == name;
    37     }
    38 
    39     public static void main(String[] args) {
    40         People p1 = new People("zhangsan");
    41         People p2 = new People("zhangsan");
    42         People p3 = new People("lisi");
    43         //p1.equals(p2);
    44         System.out.println("p1.equals(p2):"+p1.equals(p2));
    45         System.out.println("p1.equals(p3):"+p1.equals(p3));
    46         System.out.println(p1);
    47         System.out.println(p1.toString());
    48         System.out.println(p2);
    49         System.out.println(p2.toString());
    50         System.out.println(p3);
    51         System.out.println(p3.toString());
    52         
    53     }
    54 }

    运行结果:

    p1.equals(p2):true
    p1.equals(p3):false
    zhangsan
    zhangsan
    zhangsan
    zhangsan
    lisi
    lisi

    instanceof关键字

    作用:判断一个对象是否属于一个类

    格式: 对象 instanceof 类      (返回布尔型)

    向下转型做判断

    我们上下代码:

    1 package com.learn.chap03.sec15;
    2 
    3 public class Animal {
    4     
    5     public void say(){
    6         System.out.println("我是一个动物!");
    7     }
    8 }
    package com.learn.chap03.sec15;
    
    public class Dog extends Animal{
        
        @Override
        public void say() {
            System.out.println("我是一只狗");
        }
    
        /**
         * 定义子类方法
         */
        public void f1(){
            System.out.println("狗喜欢啃骨头");
        }
    }
    package com.learn.chap03.sec15;
    
    public class Cat extends Animal {
        
        @Override
        public void say(){
            System.out.println("我是一只猫");
        }
        
        /**
         * 定义子类方法
         */
        public void f2(){
            System.out.println("猫喜欢吃鱼");
        }
    }
    package com.learn.chap03.sec15;
    
    public class Test {
        
        /**
         * 静态方法里面 无法调用非静态方法 下面main方法是静态的,所以doSomeThing方法必须要为静态方法
         * @param animal
         */
        public static void doSomeThing(Animal animal){
            animal.say();
            if(animal instanceof Dog){ // 向下转型做判断,这样下面的代码就会是安全的
                ((Dog) animal).f1();
            }
            if(animal instanceof Cat){ // 向下转型做判断,这样下面的代码就会是安全的
                ((Cat) animal).f2();
            }
        }
        
        public static void main(String[] args) {
            Animal dog = new Dog();
            System.out.println("dog对象是否属于Animal类:"+(dog instanceof Animal));
            System.out.println("dog对象是否属于Dog类:"+(dog instanceof Dog));
            System.out.println("dog对象是否属于Cat类:"+(dog instanceof Cat));
        
            doSomeThing(new Dog());
            doSomeThing(new Cat());
            
        }
    }

    运行结果:

    dog对象是否属于Animal类:true
    dog对象是否属于Dog类:true
    dog对象是否属于Cat类:false
    我是一只狗
    狗喜欢啃骨头
    我是一只猫
    猫喜欢吃鱼

  • 相关阅读:
    [Python Study Notes]进程信息(丁丁软件监控进程,http-post)
    [Python Study Notes]cpu信息
    [Python Study Notes]电池信息
    [Python Study Notes]内存信息
    [Python Study Notes]磁盘信息和IO性能
    [Python Study Notes]计算cpu使用率v0.1
    [Python Study Notes]计算cpu使用率
    [Python Study Notes]psutil模块
    [解决问题] E: 无法获得锁 /var/lib/dpkg/lock
    [Python Study Notes] python面试题总结
  • 原文地址:https://www.cnblogs.com/eaglezb/p/5964512.html
Copyright © 2020-2023  润新知