版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
抽象类与接口抽象类与接口1抽象方法和抽象类在类中没有方法体的方法,就是抽象方法。含有抽象方法的类,即为抽象类。如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类。构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。抽象方法和抽象类在类中没有方法体的方法,就是抽象方法。2接口接口的概念是建立在封装的基础之上。在面向对象程序设计中,封装是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。因此接口在面向对象程序设计中有着重要的地位。
在Java中,抽象类和接口(Interface)都是一种接口抽象机制,符合接口的特点。习惯上我们只把Java语法中的接口(Interface)作为接口的窄定义。该接口是一种类型,它定义了能被一个类实现的方法。接口接口的概念是建立在封装的基础之上。在面向对象程序设计中3接口的概念 接口是指一些方法特征的集合,它关心的是方法的特征定义(例如方法的名称、参数的类型及数量),而不是方法的具体实现。在Java中,抽象类和接口都是一种接口抽象机制,符合接口的特点。接口提供了一种抽象机制
接口使即插即用变得可能
接口针对抽象而不是针对实现
接口的概念 接口是指一些方法特征的集合,它关心的是方法的特4Java接口定义接口实现接口接口与多重继承
[public]interface接口名[extends祖先接口名]{返回类型方法名(参数列表);...类型常量字段名=值;...}[public]class类名[extends祖先类名]implements接口名[,其它接口名...]{//类的实现代码...}
下面代码通过实现Writeable接口和Eatable接口的Paper类代码,演示了多重继承的程序设计:publicclassPaperimplementsEatable,Writeable{publicvoideat(){System.out.println("撕纸吃,"+TASTELESS);}publicvoidwrite(){System.out.println("在纸上书写:");}}Java接口定义接口[public]interface5接口应用实例使用接口的好处是便于系统的扩展、维护和重用。接口的使用使得代码模块之间的耦合减弱。具体表现在对象之间的依赖关系弱化为客户——服务的关系,即客户对象请求服务,服务对象提供服务,而接口则成了提供服务的一种契约。没有经验的程序员设计接口时通常会犯合并接口和预留接口这两个错误。根据接口隔离法则,我们在设计接口时不应该强迫客户端依赖于他们用不上的方法,而是应该提供职责明确、功能专一的最小化接口。除非必要,应该严格控制接口宽度,避免接口冗余。接口应用实例使用接口的好处是便于系统的扩展、维护和重用。接6接口接口中所有的方法都是publicabstract。在接口中声明方法时,不能使用native、static、final、synchronized、private、protected等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。接口接口中所有的方法都是publicabstract。7接口接口中可以有数据成员,这些成员默认都是publicstaticfinal。接口接口中可以有数据成员,这些成员默认都是publicst8Math.javainterfaceMath{ doublePI=3.1415926; }classArithmeticimplementsMath{ doubleroundArea(doubleradius) { returnPI*radius*radius; }}classStudent{ publicstaticvoidmain(String[]args) { Arithmetica=newArithmetic(); System.out.println(a.roundArea(3)); System.out.println(Math.PI); //ok System.out.println(Arithmetic.PI); //ok System.out.println(a.PI); //ok }}Math.java9接口一个接口可以继承自另一个接口。Java中不允许类的多继承,但允许接口的多继承。接口一个接口可以继承自另一个接口。10Sofa.javainterfaceSittable{ voidsit();}interfaceLie{ voidsleep();}interfaceChairextendsSittable{}interfaceSofaextendsSittable,Lie{}Sofa.java11接口在Java中,一个类可以实现多个接口。一个类在继承另外一个类的同时,可以实现多个接口。接口在Java中,一个类可以实现多个接口。12Sofa.java//实现多个接口interfaceSittable{ voidsit();}interfaceLie{ voidsleep();}classSofaimplementsSittable,Lie{ publicvoidsit() { } publicvoidsleep() { }}Sofa.java13Sofa.java//在继承类的同时,实现多个接口interfaceSittable{ voidsit();}interfaceLie{ voidsleep();}interfaceHealthCare{ voidmassage();}classChairimplementsSittable{ publicvoidsit(){};}classSofaextendsChairimplementsLie,HealthCare{ publicvoidsleep(){}; publicvoidmassage(){};}Sofa.java14多态的概念多态是指在一棵继承树中的类可以有多个同名但不同方法体以及不同形参的方法。两种情况:覆盖:在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法的形参与返回值都相同,而内部处理不同,这种方法在使用过程中,Java虚拟机会根据调用这个方法的类来确定哪个方法被调用重载:同一个类定义中有多个同名的方法,但有不同的形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法注:不能根据返回值的类型来区分重载的方法多态的概念多态是指在一棵继承树中的类可以有多个同名但15方法的覆盖与重载的区别方法的覆盖是子类和父类之间的关系,而重载是同一类内部多个方法间的关系方法的覆盖一般是两个方法间的,而重载时可能有多个重载方法覆盖的方法有相同的方法名和形参表,而重载的方法只能有相同的方法名,不能有相同的形参表覆盖时区分方法的是根据调用他的对象,而重载是根据形参来决定调用的是哪个方法用final修饰的方法是不能被子类覆盖的,只能被重载方法的覆盖与重载的区别方法的覆盖是子类和父类之间的关系,而重16public
Class
Parents
{
public
void
print()
{
System.out.println(“parents”);
}}public
Class
Father
extends
Parents
{
public
void
print()
{ System.out.println(“father”); }}public
Class
Mother
extends
Parents
{
public
void
print()
{
System.out.println(“mother”);
}}public
Class
Test
{
public
void
find(Parents
p)
{
p.print(); }public
static
void
main(String[]
args)
{
Test
t
=
new
Test();
Father
f
=
new
Father();
Mother
m
=
new
Mother();
t.find(f);
t.find(m);
}}
public
Class
Parents
{
publi17最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。
在Java中,谈论多态就是在讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体关联起来。在C语言中,方法(在C中称为函数)的绑定是由编译器来实现的,在英文中称为early
binding(前期绑定),因此,大家自然就会想到相对应的late
binding(后期绑定),这在Java中通常叫做run-time
binding(运行时绑定),运行时绑定的目的就是在代码运行的时候能够判断对象的类型。多态的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。
最后的输出结果分别是father和mother,18多态的一个小结:Java中除了static和final方法外,其他所有的方法都是运行时绑定的。private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
在派生类中,对于基类中的private方法,最好采用不同的名字。
包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。
对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。
在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。
构造方法是被隐式声明为static方法。
用继承表达行为间的差异,用字段表达状态上的变化。
多态的一个小结:19classSuper{ staticStringgreeting(){ return"Goodnight"; } Stringname(){ return"Richard"; }}classSubextendsSuper{ staticStringgreeting(){ return"Hello"; } Stringname(){ return"Dick"; }}classTest{ public
static
voidmain(String[]args){ Supers=newSub(); System.out.println(s.greeting()+","+()); }}classSuper{classTest{20运行Test类的结果如下Goodnight,Dick试图用子类的静态方法隐藏父类中同样标识的实例方法是不合法的编译器将会报错试图用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的编译器同样会报错静态方法和最终方法带关键字final的方法不能被覆盖实例方法能够被覆盖抽象方法必须在具体类中被覆盖运行Test类的结果如下21常量的定义使用关键字final定义常量,例如:finaldoublePI=3.1415926;作为一种约定,在定义常量时,通常采用大写形式。final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。为了节省内存,我们通常将常量声明为静态的(static)。常量的定义使用关键字final定义常量,例如:22当子类中的变量名与父类的相同,原来的变量被遮盖。方法的覆盖(overriding)和重载(overloading)。子孙类中定义的方法和祖先类中某个方法同名、同参数行,则祖先类中的该方法被覆盖;方法的重载是指一个对象的多态性,即多个方法用相同的名称,但参数行不同。
JAVA开发与应用-抽象类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度房产买卖合同中的房屋交付条款2篇
- 工厂2024年度车间人力资源管理承包合同
- 设备合同范本完整版
- 天然气劳务分包合同
- 二零二四年度钢管、钢材交易合同3篇
- 青蛙课件教学课件
- 高级餐厅服务员团队建设与激励机制咨询合同(04版)
- 社保代缴协议范例
- 基于AI的智能客服系统开发与部署合同(2024年度)
- 技术资源合作协议书
- 2022年河南周口市眼科医院招聘35人笔试备考题库及答案解析
- 抗菌药物使用调查分析(5篇)
- 华为鸿蒙深度研究
- 农业经济学智慧树知到答案章节测试2023年华南农业大学
- 甲乙流感病毒实验室风险评估
- 餐厅席间服务技巧
- 商业银行股份有限公司尽职调查清单简版
- GB/T 3520-2008石墨细度试验方法
- 整理版《木瓜恰恰恰》优质课件
- 语文五年级上册教学课件部编版习作:我想对您说(课件)
- 水电站运行综合作业教学大纲
评论
0/150
提交评论