java中可以通过instanceof关键字来判断一个对象是否是某一个类的实例:
用法:对象 instanceof 类 ->返回boolean类型
即:如果object是class的实例,instanceof运算之后返回true,否则返回false
下面看例子:
1.通过向上转型实例化:
class A {
}
class B extends A {
}
public class PolymorphismDemo2{
public static void main(String[] args) {
A a1 = new B();
A a2 = new A();
System.out.println("a1是A的实例么?:"+(a1 instanceof A));
System.out.println("a1是B的实例么?:"+(a2 instanceof B));
System.out.println("------------------------");
System.out.println("a2是A的实例么?:"+(a2 instanceof A));
System.out.println("a2是B的实例么?:"+(a2 instanceof B));
}
}
输出结果:
a1是A的实例么?:true
a1是B的实例么?:false
------------------------
a2是A的实例么?:true
a2是B的实例么?:false
2.通过向下转型实例化:
class A {
}
class B extends A {
}
class C extends A{
}
public class PolymorphismDemo2{
public static void main(String[] args) {
fun(new B()); //调用fun()传入B实例
fun(new C()); //调用fun()传入C实例
}
public static void fun(A a){
B b = (B) a;
}
}
传入两个实例,如果不加intanceof判断的话,会出错
所以需要加上instanceof判定,如下:
class A {
}
class B extends A {
}
class C extends A{
}
public class PolymorphismDemo2{
public static void main(String[] args) {
fun(new B()); //调用fun()传入B实例
fun(new C()); //调用fun()传入C实例
}
public static void fun(A a){
if(a instanceof B){
B b = (B) a;
}
if(a instanceof C){
C c = (C) a;
}
}
}
最后通过一个例题来理解intanceof的用法:
interface A {
}
class B implements A {
}
class C extends B {
}
public class PolymorphismDemo {
public static void main(String[] args) {
A a = new B();
B b = new B();
C c = new C();
System.out.println("a是A的实例么?:"+(a instanceof A));
System.out.println("a是B的实例么?:"+(a instanceof B));
System.out.println("-----------------------------------");
System.out.println("b是C的实例么?:"+(b instanceof C));
System.out.println("b是B的实例么?:"+(b instanceof B));
System.out.println("b是A的实例么?:"+(b instanceof A));
System.out.println("-----------------------------------");
System.out.println("c是C的实例么?:"+(c instanceof C));
System.out.println("c是B的实例么?:"+(c instanceof B));
System.out.println("c是A的实例么?:"+(c instanceof A));
}
}
输出结果:
a是A的实例么?:true
a是B的实例么?:true
-----------------------------------
b是C的实例么?:false
b是B的实例么?:true
b是A的实例么?:true
-----------------------------------
c是C的实例么?:true
c是B的实例么?:true
c是A的实例么?:true
a是B的实例么?:true
-----------------------------------
b是C的实例么?:false
b是B的实例么?:true
b是A的实例么?:true
-----------------------------------
c是C的实例么?:true
c是B的实例么?:true
c是A的实例么?:true