面向对象编程:抽象类和接口

一.抽象类

1.1 什么是抽象类

若强制要求子类覆写方法,用到抽象类。
现实生活中,有很多的抽象类,这些类都是一个概念化的,没发具体到某个实例,描述这一类对象共同的属性和行为。
人类->抽象,没法对应到具体某个或某一类人,例如中国人,日本人,印度人。
抽象类是普通类的超集,只是比普通类多了一些抽象方法而已[0…N],抽象方法所在的类必须是抽象类,子类若继承了抽象类,必须覆写所有抽象方法(前提,子类是普通类)
此时Sharp类,包括Sharp的print()都是抽象的概念=>抽象类
在这里插入图片描述

1.2抽象类的使用

抽象方法,只有方法声明,没有方法体
一个类若存在抽象方法,必须使用abstract抽象类
在这里插入图片描述
java中定义抽象类或者抽象方法,使用abstract关键字
1.抽象方法所在的类必须使用abstract关键字声明抽象类。
抽象方法指的是abstract关键字声明,只有函数声明没有函数实现的方法,称为抽象方法。
java中,没有方法体的方法就是抽象方法//error
本地方法也没有方法体,不是抽象方法。
2.若一个类使用了abstract关键字声明为抽象类,无法直接通过该类实例化对象,哪怕该类中一个抽象方法都没有。当一个类是抽象类,不管他有没有抽象方法,这个类本身是一个抽象的概念,没发具体到某个特定的实例。
只能通过向上转型变为抽象类的引用。
Sharp sharp = new Sharp()//error
人类抽象
Person per = new Person();//error在这里插入图片描述
在这里插入图片描述
Person per = new China();//ok
3.子类继承了抽象类,就必须强制子类覆写抽象类中的所有抽象方法(子类是个普通类),也满足单继承局限,一个子类只能extends一个抽象类。
在这里插入图片描述
4.抽象类是普通类的超集(普通类有的内容,抽象类全都有),只是比普通类多了一些抽象方法而已,抽象类虽然没发直接实例化对象,但是也可以存在构造方法,子类在实例化时仍然遵从继承的规则,先调用父类(抽象类)的构造方法,而后调用子类的构造方法!
在这里插入图片描述
在这里插入图片描述

二.接口

一般来说,接口的使用表示两种场景
a.接口表示具备某种能力/行为,子类在实现接口时,不是is a ,而是具备这种行为或者能力。
游泳->能力或者行为,Person满足游泳接口,Dog也能满足游泳接口,Duck也能满足游泳接口
2.接口表示一种规范或者标准,例如USB接口,5G标准

2.1接口的概念

接口中只有全局常量和抽象方法->更纯粹的抽象概念。其他东西统统没有,
接口使用关键字interface声明接口,子类使用implements来实现接口。

2.2接口的使用

1.USB接口在这里插入图片描述
a.USB表示一种规范。
鼠标,键盘外设都属于USB接口的子类。
子类使用implements实现接口,必须覆写所有的抽象方法在这里插入图片描述
电脑这个类算不算USB接口的子类?
所有带着USB线插入到电脑的设备都应该满足USB规范。
电脑叫做USB规范的使用者
对于电脑的使用者生产者来说,我根本不关心到底哪个具体设备插入到我的电脑上,只有这个设备满足了USB接口,都能被电脑识别。
就可以实现一个接口可以接受无数种设备,只要这个设备满足USB接口,都可以插入到电脑,且被电脑识别
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
假设现在多了个子类Camera,对于电脑这个类来说,一点影响都没有,多一行代码都不会写。开闭原则,所有设计模式核心思想:程序应当对扩展开放,对修改关闭,总结就是方便拓展,不能影响已经写好的程序。
在这里插入图片描述
b.接口表示能力:
接口允许多实现,一个类可能具备多个能力,同时实现多个接口,若实现多个父接口,子类是个普通的话,需要覆写所有的抽象方法。
表示子类同时实现了多个父接口
在这里插入图片描述
在这里插入图片描述
由于接口只有全局常量和抽象方法,因此接口中public,abstract表示抽象方法。
static,final表示常量。
全都可以省略
在接口的声明中这些关键字都不用写,只保留最核心的方法返回值,方法参数列表,名称即可。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
结果:在这里插入图片描述

2.3 接口的多继承

接口与接口之间也存在继承关系。接口坚决不能继承一个类。
IC接口同时继承了多个父接口,继承了所有抽象方法,子类在实现IC接口时,必须覆写所有抽象方法。
在这里插入图片描述
在这里插入图片描述
如果一个类既需要继承一个类,同时实现多个接口时,先使用extends继承一个类, 而后使用implements实现多个接口。在这里插入图片描述

2.4 接口的命名规范

为了区分接口和类,命名接口使用I开头,IRun,ISwim.
子类实现一个接口时,命名以相应的接口开头,以impl结尾
eg.如果是IRun的子类,Runimpl
如果子类实现多个父接口,不需要使用此规范来命名。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值