java instanceof和getClass()的区别以及继承与组合的区别

1.instanceof:比较的是继承关系或者实现关系的类类型,子类对象或者实现类对象放在前面,例如:

class A{}

class B extends A{}

B b = new B();

b instanceof A

 

2.getClass():比较任何类的类型(两个毫不相干的类型,当然这也没啥意义),也可以通过isAssignableFrom(Class<?> cls)方法比较,以下是API原意:

判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回true;否则返回 false。如果该 Class 表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true;否则返回 false

它是通过父类名称点class,或者父类对象点getClass(),点isAssignableFrom(子类名称点class,或者子类对象点getClass()),进行比较。

 

A a = new A();

 

例如:boolean b = A.class.isAssignableFrom(B.class) 或者a.getClass().isAssignableFrom(b.getClass)

如果用equals或者==比较,那么比较的是他们的类类型是否相同。

例如:

class C {}

 

A.class.equals(C.class)或者A.class.getName() == C.class.getName()返回的肯定是false;

A.class它的值为:class 包路径.A   就是A的类路径

C.class它的值为:class 包路径.C  就是C的类路径


B类和A比较也是一样 如果不动态绑定,返回的也是false.


它们两比较你觉得可能返回true吗?

 

3.继承是“is   a", 组合是“like   a"

组合关系是:局部类和整体类的关系,包括从整体类到局部类的分解过程,从局部类到整体类的组合过程。

继承关系:父类和子类的关系,包括从子类到父类的抽象过程,从父类到子类的扩展过程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值