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