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
我是一只狗
狗喜欢啃骨头
我是一只猫
猫喜欢吃鱼

 

posted on 2016-10-15 15:19  eaglezb  阅读(5708)  评论(0编辑  收藏  举报

导航