Java中isAssignableFrom和instanceof有什么区别?

2026-05-21 00:312阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计381个文字,预计阅读时间需要2分钟。

Java中isAssignableFrom和instanceof有什么区别?

`[b]isAssignableFrom([/b])` 是用来判断一个类 `Class1` 和另一个类 `Class2` 是否相同,或者 `Class2` 是否是 `Class1` 的超类或接口的。通常调用格式是 `Class1.isAssignableFrom(Class2)`。调用者和参数都是 `java.lang.Class` 类型。

Java中isAssignableFrom和instanceof有什么区别?

[b]isAssignableFrom [/b]是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。 通常调用格式是 Class1.isAssignableFrom (Class2) 调用者和参数都是 java.lang.Class 类型。 [b]instanceof [/b]是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 格式是: oo instanceof TypeName 第一个参数是对象实例名,第二个参数是具体的类名或接口名

package com.intf;public interface IBall { public void sayHello();}

package com.intf;

public class Ball implements IBall { @Override public void sayHello() { System.out.println("------->sayHello"); }}

package com.intf;public class Ball1 extends Ball implements IBall {}

package com.intf;public class Test { public static void main(String[] args) { Ball t = new Ball(); t.sayHello(); System.out.println(IBall.class.isAssignableFrom(t.getClass())); System.out.println("-----------------------"); Ball1 t1 = new Ball1(); t1.sayHello(); //IBall是t的接口 System.out.println(IBall.class.isAssignableFrom(t.getClass())); //IBall是t1的接口 System.out.println(IBall.class.isAssignableFrom(t1.getClass())); //t是t1的超类/父类 System.out.println(t.getClass().isAssignableFrom(t1.getClass())); //t1是实现IBall System.out.println(t1 instanceof IBall); //t1是继承Ball类 System.out.println(t1 instanceof Ball); //t是实现IBall System.out.println(t instanceof IBall); }}

输出:

------->sayHello

true

-----------------------

------->sayHello

true

true

true

true

true

true

本文共计381个文字,预计阅读时间需要2分钟。

Java中isAssignableFrom和instanceof有什么区别?

`[b]isAssignableFrom([/b])` 是用来判断一个类 `Class1` 和另一个类 `Class2` 是否相同,或者 `Class2` 是否是 `Class1` 的超类或接口的。通常调用格式是 `Class1.isAssignableFrom(Class2)`。调用者和参数都是 `java.lang.Class` 类型。

Java中isAssignableFrom和instanceof有什么区别?

[b]isAssignableFrom [/b]是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。 通常调用格式是 Class1.isAssignableFrom (Class2) 调用者和参数都是 java.lang.Class 类型。 [b]instanceof [/b]是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 格式是: oo instanceof TypeName 第一个参数是对象实例名,第二个参数是具体的类名或接口名

package com.intf;public interface IBall { public void sayHello();}

package com.intf;

public class Ball implements IBall { @Override public void sayHello() { System.out.println("------->sayHello"); }}

package com.intf;public class Ball1 extends Ball implements IBall {}

package com.intf;public class Test { public static void main(String[] args) { Ball t = new Ball(); t.sayHello(); System.out.println(IBall.class.isAssignableFrom(t.getClass())); System.out.println("-----------------------"); Ball1 t1 = new Ball1(); t1.sayHello(); //IBall是t的接口 System.out.println(IBall.class.isAssignableFrom(t.getClass())); //IBall是t1的接口 System.out.println(IBall.class.isAssignableFrom(t1.getClass())); //t是t1的超类/父类 System.out.println(t.getClass().isAssignableFrom(t1.getClass())); //t1是实现IBall System.out.println(t1 instanceof IBall); //t1是继承Ball类 System.out.println(t1 instanceof Ball); //t是实现IBall System.out.println(t instanceof IBall); }}

输出:

------->sayHello

true

-----------------------

------->sayHello

true

true

true

true

true

true