初學者難免有點混淆java中instanceof和getClass()的作用, 下面就來一一講解。
父類A:
class A { }
子類B:
class B extends A { }構造對象
Object o1 = new A();
Object o2 = new B();
一、instanceof
演示一:
1、o1 instanceof A => true
2、o1 instanceof B => false
3、o2 instanceof A => true // <================ HERE
4、o2 instanceof B => true
分析==>
用法:
英文:result = object instanceof class
中文:結果 = 某個實例對象 instanceof 某個類名
java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
總結:
S(Object) instanceof T(Class)
簡單來說,instanceof就是判斷對象S是否是T類的實例,或者是T類的子類實例。
二、getclass
演示二:
1、o1.getClass().equals(A.class) => true
2、o1.getClass().equals(B.class) => false
3、o2.getClass().equals(A.class) => false // <===============HERE
4、o2.getClass().equals(B.class) => true
分析==>
getClass方法在JDK1.8中定義如下:
/**
* Returns the runtime class of this Object
*/
public final native Class<?> getClass();
功能:
返回在運行時期對象的類。
getClass() will be useful when you want to make sure your instance is NOT a subclass of the class you are comparing with.
三、instanceof與getclass的運用
1、區別:
- instanceof: 主要用來判斷 對象與類之間的關系。
- getclass: 獲取運行時期對象的類。
2、運用:
假設目前有父親、孩子兩個角色
場景一:
參加父親朋友公司開業活動
此時,父親本人可以親自參加;
如果父親當天正在外地出差,此時他的孩子可以替其參加。
當父類與子類都可以通過時,則使用instanceof
場景二:
父親帶孩子去游樂場玩,游樂場規定,一些小型游戲場地,只允許孩子進入,父親只能在門外觀看。
當限定到具體某一類時,則使用getclass+equals搭配
參考: