一句話總結:
- isAssignableFrom()方法是從類繼承的角度去判斷,instanceof()方法是從實例繼承的角度去判斷。
- isAssignableFrom()方法是判斷是否為某個類的父類,instanceof()方法是判斷是否某個類的子類。
1. Class.isAssignableFrom()方法
Class.isAssignableFrom()是用來判斷一個類Class1和另一個類Class2是否相同或是另一個類的子類或接口。
格式為:
Class1.isAssignableFrom(Class2)
調用者和參數都是java.lang.Class類型。
2.Class.instanceof()方法
Class.instanceof()是用來判斷一個對象實例是否是一個類或接口的或其子類子接口的實例。
格式是:
obj instanceof TypeName
第一個參數是對象實例名,第二個參數是具體的類名或接口名,例如 String,InputStream。其返回值為boolean。
3.具體用法
轉自(http://sunnylocus.iteye.com/blog/555676)
package com.bill99.pattern; public class AssignableTest { public AssignableTest(String name) { } /** * 判斷一個類是否是另一個類的父類 * 是打印true * 否打印false */ public static void testIsAssignedFrom1() { System.out.println("String是Object的父類:"+String.class.isAssignableFrom(Object.class)); } /** * 判斷一個類是否是另一個類的父類 * 是打印true * 否打印false */ public static void testIsAssignedFrom2() { System.out.println("Object是String的父類:"+Object.class.isAssignableFrom(String.class)); } /** * 判斷一個類是否和另一個類相同 * 是打印true * 否打印false */ public static void testIsAssignedFrom3() { System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class)); } /** * 判斷str是否是Object類的實例 * 是打印true * 否打印false */ public static void testInstanceOf1() { String str = new String(); System.out.print("str是Object的實例:"); System.out.println(str instanceof Object); } /** * 判斷o是否是Object類的實例 * 是打印true * 否打印false */ public static void testInstanceOf2() { Object o = new Object(); System.out.print("o是Object的實例:"); System.out.println(o instanceof Object); } public static void main(String[] args) { testIsAssignedFrom1(); testIsAssignedFrom2(); testIsAssignedFrom3(); testInstanceOf1(); testInstanceOf2(); } }
結果:
String是Object的父類:false
Object是String的父類:true
Object和Object相同:true
str是Object的實例:true
o是Object的實例:true
