Java之Object類與instanceof關鍵字

Object類是全部類的父類:安全

咱們上下代碼:ide

 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)方法,來完成咱們本身的邏輯。this

 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 }

運行結果:spa

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

 

instanceof關鍵字對象

做用:判斷一個對象是否屬於一個類blog

格式: 對象 instanceof 類      (返回布爾型)繼承

向下轉型作判斷get

 

咱們上下代碼:class

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類:truedog對象是否屬於Dog類:truedog對象是否屬於Cat類:false我是一隻狗狗喜歡啃骨頭我是一隻貓貓喜歡吃魚

相關文章
相關標籤/搜索