首页 > 代码库 > Java之Object类与instanceof关键字

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     @Override26     public String toString() {27         return this.getName();28     }29     30     /**31      * 重写了Object类的equals(Object obj)方法32      */33     @Override34     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
我是一只狗
狗喜欢啃骨头
我是一只猫
猫喜欢吃鱼

 

Java之Object类与instanceof关键字