2021-05-08

本文详细介绍了Java中抽象类与接口的区别,包括它们在继承、实现和功能上的不同,并强调了优先使用接口的原则。此外,还讲解了instanceof关键字的用途,用于判断对象是否为特定类或接口的实例。最后,阐述了Java中的对象类型转换,包括向上转型和向下转型的语法、特点以及可能出现的异常情况,强调了正确使用instanceof避免运行时错误的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.抽象类和接口的区别
在这里插入图片描述

&相同点:
①都位于继承的顶端,用于被其他类实现或继承;
②都不能直接实例化对象;都包含抽象方法,其子类都必须覆写这些抽象方法;
&区别:
①抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;
②接口只能包含抽象方法;一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;
③(接口弥补了Java的单继承)抽象类是这个事物中应该具备的内容, 继承体系是一种 is…a关系 ;
接口是这个事物中的额外内容,继承体系是一种 like…a关系
&二者的选用:
①优先选用接口,尽量少用抽象类;
②需要定义子类的行为,又要为子类提供共性功能时才选用抽象
③类要实现的方法不是当前类族的必要,而是扩展,用接口.
二.Instanceof关键字
在java中可以使用Instanceof关键字判断一个对象是否为一个类(接口,抽象类,父类)的实例。
语法格式如下: boolean result = obj instanceof Class/interface;
其中,obj 是一个对象,Class 表示一个类或接口。当obj 是 class 类(或接口)的实例或者子类实例
时,结果 result 返回 true,否则返回 false。
Object是java中所有类型的根类型
在这里插入图片描述

三.Java对象类型转换
概念:是指存在继承关系的对象,不是任意类型的对象
分别是向上转型(upcasting)和向下转型(downcasting)。
向上转型:父类引用指向子类对象为向上转型。
①语法格式如下: fatherClass obj = new sonClass();
fatherClass 是父类名称或接口名称,obj 是创建的对象,sonClass 是子类名称。
在这里插入图片描述

②向上转型就是把子类对象直接赋给父类引用,不用强制转换。
③使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有成员,最终运行效果
看子类的具体实现。
向下转型:与向上转型相反,子类对象指向父类引用为向下转型。
①语法格式如下:sonClass obj = (sonClass) fatherClass;
fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
在这里插入图片描述

②向下转型可以调用子类类型中所有的成员,
③不过需要注意的是如果父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,
也就是编译是不会出错误。
④但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但
是运行时会出现我们开始提到的 Java 强制类型转换异常,一般使用 instanceof 运算符来避免
出此类错误。
异常错误,不能转型
Exception in thread "main"java.lang.ClassCastException: com.pqw.instanceofdemo.Father cannot be cast to com.pqw.instanceofdemo.Childat com.pqw.instanceofdemo.Demo.main(Demo.java:24)
以下图片为正确的写法:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值