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
我是一只狗
狗喜歡啃骨頭
我是一只貓
貓喜歡吃魚

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM