版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上一章重点内容复习1.继承2.this、super3.强制类型转换4.多态5.构造方法的多态与继承6.Equals()方法理解目前一页\总数六十九页\编于十八点本章主要内容5.1抽象类5.2接口5.3内部类2目前二页\总数六十九页\编于十八点5.1抽象类用abstract修饰的类称为抽象类,用abstract修饰的成员方法称为抽象方法。对于抽象方法,在抽象类中只指定方法名及类型,而不写实现代码。3目前三页\总数六十九页\编于十八点5.1.1抽象类的定义[public]abstractclass类名[extends父类名列表]{//数据成员声明
//抽象方法声明
[public][abstract]返回值方法名(参数列表)[throw异常列表]}4目前四页\总数六十九页\编于十八点abstractclassShapes{protectedintx,y,k;protecteddoublem;abstractpublicdoublegetArea();abstractpublicdoublegetPerimeter();}如实例:4/sample4-15不能把一个类同时标识为abstract和final的,abstract表示很多类的事物总称,可以再分子类;而final的类一定不能再分子类.两者相反含义。5目前五页\总数六十九页\编于十八点5.1.2抽象方法抽象方法充当着占位的角色,其具体实现在子类中.抽象方法只有方法声明,没有方法体.
Publicabstractvoidstartup(); publicabstractvoidgo2(){};抽象类与抽象方法之间的关系是,抽象方法只能存在于抽象的类中.6目前六页\总数六十九页\编于十八点抽象方法示例抽象类中可以有非抽象方法,非抽象类中不能有抽象方法.6/4/sample4_16.7目前七页\总数六十九页\编于十八点抽象类注意以下几个方面抽象类中可以有零个或多个抽象方法,也可以包含非抽象方法。只要有一个抽象方法,类前就必须有abstract修饰。若没有抽象方法,类前也可有abstract修饰。抽象类不能创建对象,创建对象必须由具体子类来实现,但可以有声明,声明能引用所有具体子类的对象。如实例:Ab.java8目前八页\总数六十九页\编于十八点对于抽象方法来说,在抽象类只指定其方法及其类型,而不书写其实现代码。抽象类必定要派生子类,若派生的子类是具体类,则具体子类中必须实现抽象类中定义的所有抽象方法(覆盖);若子类还是抽象类,父类中已有的abstract方法,则子类中就不能再有。如实例:an.java9目前九页\总数六十九页\编于十八点在抽象类中,非抽象方法可以调用抽象方法。
abstract不能与final并列修饰同一个类;abstract不能与private,static,final或native并列修饰同一个方法;abstract类中不能有private成员如实例:an.java10目前十页\总数六十九页\编于十八点5.1.4抽象类的产生过程抽象类形成的思维过程:客观事物—>对象—>类—>抽象类。(x,y)(x,y)widthheightrxyzwidthheight(x’,y’)11目前十一页\总数六十九页\编于十八点对以上三类进行抽象:图6-412目前十二页\总数六十九页\编于十八点抽象实例AbstractclassInstrument4{inti;Publicabstractvoidplay();PublicStringwhat(){return“Instruemt4”;}publicabstractvoidadjust();}Classwind3extendsInstrument4{publicvoidplay(){System.out.println(“wind.play”);}PublicStringwhat(){return“wind3”;}Publicvoidadjust(){}}13目前十三页\总数六十九页\编于十八点抽象实例AbstractTest.java6/4/sample4_17.java14目前十四页\总数六十九页\编于十八点5.1.5抽象类在继承方面的应用可以简化子类定义的烦琐度明晰类的层次关系如实例:6.815目前十五页\总数六十九页\编于十八点5.1.6引用具体子类对象抽象类不能有自己的实例对象,但是可以有自己的声明,而且其声明可以引用所有具体子类的对象。实例:6.916目前十六页\总数六十九页\编于十八点5.1.7抽象类设计注意事项抽取同类对象的共同行为包含对象的本质尽可能简单17目前十七页\总数六十九页\编于十八点抽象类——设计不当的举例abstract
class
Door
{
publicabstract
void
open();
publicabstract
void
close();
publicabstract
void
alarm();
}
报警门子类的代码实现如下:class
AlarmDoor
extends
Door
{
publicvoid
open()
{
…
}
publicvoid
close()
{
…
}
publicvoid
alarm()
{
…
}
}
但其它类也要继承Door,由于继承关系,必须实现一个和它不相干的方法alarm,这显然对于其它子类的实现带来不便。18目前十八页\总数六十九页\编于十八点5.2接口接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征,没有方法的实现.接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
publicinterfaceComparable{intcompareTo(Objectother);}
任何实现Comparable接口的类都必须包含compareTo方法,且该方法参数必须是一个Object对象,返回一个整型数值.19目前十九页\总数六十九页\编于十八点接口的定义当定义一个接口时,实际上是在编写一个合约,该合约规定了用来描述实现该接口的类能够做什么,充当什么角色.而接口中并没有功能的具体实现,具体实现由签了合约的类自己来完成.20目前二十页\总数六十九页\编于十八点接口的定义[public]interface
接口名[extends父接口名列表]
{//静态常量数据成员声明
[public][static][final]域类型域名=常量值;
//抽象方法声明
[public][abstract]返回值方法名(参数列表)[throw异常列表];}21目前二十一页\总数六十九页\编于十八点接口的定义下面是合法的接口声明:PublicabstractinterfaceAerocft{}Publicinterfaceship{}Interfaceship{}InterfaceJetPlaneextendsship{}Public可写可不写,如果接口定义为public类型,必须位于与其同名的java文件中.Abstract可写可不写.在使用接口继承时,可以同时从多个接口继承,(接口以外的类型,都不可以被接口继承).InterfaceAero{}Interfacejet{}InterfacejetplaneextendsAero,jet{}22目前二十二页\总数六十九页\编于十八点接口的两种含义:可以被引用调用的方法(public方法或同包中的protected方法或默认方法);另一种是同“类”概念地位相当的专有概念interface,interface是功能方法说明的集合。23目前二十三页\总数六十九页\编于十八点5.2.2接口的特性
接口定义,使用关键字interface,而不是Class,interface前的修饰符要么是public,要么是默认。接口中定义的域变量全是finalstatic,即静态常量。即使没有任何修饰符,其效果完全等效。24目前二十四页\总数六十九页\编于十八点接口没有构造方法,接口中所有方法自动属于abstract,即使没有任何修饰符,其效果完全等效。
intcompareTo(Objectother);接口中不能包含静态方法
publicinterfaceComparable{staticintcompareTo(Objectother);}因为static修饰的方法必然被直接调用,所以不能声明为抽象方法。25目前二十五页\总数六十九页\编于十八点接口中只能定义静态常量,不能含有实例域
publicinterfaceCaculator{staticfinaldoublePI=3.1415926;staticfinaldoubleE=2.71828183;
doublesum;//接口中的域自动设为
staticfinal}26目前二十六页\总数六十九页\编于十八点不能在接口中实现方法
publicinterfaceComparable{intcompareTo(Objectother);}publicinterfaceCaculator{Objectadd(Objectother){…};}27目前二十七页\总数六十九页\编于十八点接口具有继承性,可通过extends关键字声明接口的父接口。
publicinterfaceMoveable{voidmove(doublex,doubley);}publicinterfacePoweredextendsMoveable{doublemilesPerGallon();}28目前二十八页\总数六十九页\编于十八点接口和子接口都不能有自己的实例对象,但可以有自己的声明,可引用那些实现本接口或子接口的类对象。因此接口中的常量必须定义为static,以表明其没有对象这一特点。29目前二十九页\总数六十九页\编于十八点5.2.3接口的角色接口扮演将实现者和使用者有机联系到一起的角色。当功能没有实现和使用前,先定义接口,再进行功能的实现以及使用。使用者按照接口进行使用,实现者按照接口进行实现。30目前三十页\总数六十九页\编于十八点5.2.4接口中方法的实现与使用类的继承使得开发人员可以处理同类的事物,但不能处理不同类但具有相同功能的事物.接口能够被很多不同的类实现,但接口中定义的方法仅仅是实现某一特定功能的规范,而并没有真正实现这些功能.这些功能都需要在实现该接口的类中完成.如实例sample5.131目前三十一页\总数六十九页\编于十八点5.2.5接口实现要注意几点在类中,用implements关键字来实现接口。一个类可以实现多个接口,在implements后用逗号隔开多个接口的名字。一个接口也可被多个类来实现。接口的实现者可以继承接口中定义的常量,其效果等效于在这个实现类当中定义了一个静态常量。如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现接口的所有抽象方法,而且方法头部分应该与接口中的定义完全一致。32目前三十二页\总数六十九页\编于十八点如果实现接口的类是abstract类,则它可以不实现该接口的所有方法。但对于抽象类的任何一个非抽象的子类而言,接口中的所有抽象方法都必须实现。这些方法体可以来自抽象的父类(被子类继承),也可以来自子类自身的实现,这主要体现了非抽象类中不能存在抽象方法的原则。接口的抽象方法的访问限制符如果为缺省或public时,类在实现方法时,必须显式使用public修饰符,否则将被警告为缩小了接口中定义的方法的访问控制范围。33目前三十三页\总数六十九页\编于十八点让类实现一个接口将类声明为实现给定的接口
classEmployeeimplementsComparable对接口中的所有方法进行定义publicintcompareTo(ObjectotherObject){Employeeother=(Employee)otherObject;if(salary<other.salary)return-1;if(salary>other.salary)return1;return0;}34目前三十四页\总数六十九页\编于十八点接口不能使用new运算符实例化一个接口
x=newComparable(...);//ERROR可以声明接口的变量,接口变量必须引用实现了该接口的类的对象
Comparablex;x=newEmployee(...);35目前三十五页\总数六十九页\编于十八点实例6.1036目前三十六页\总数六十九页\编于十八点5.2.6.实例所有实现interface中的方法必须被申明为public如实例Store.javaInterface可以从多个interface得到继承,但是不能继承类。如实例HorrorShow.java一个可以实现多个interface,如实例Adventure.java37目前三十七页\总数六十九页\编于十八点接口在编程中的作用接口的作用主要体现在:一个接口可以被多个类实现,这些类的对象都可以被这个接口的声明所引用。如实例集合类接口Collection,它的直接实现类有十一个。AbstractSet,Vector,LinkedList,等。在LinkedList中有如下的方法:PublicbooleanaddAll(intindex,Collectionc){intnumNew=c.size();…….}当调用此方法时,第二个参数Collection接口声明C可以引用所有实现类对象,不管那一种都一定有size()这个接口方法。38目前三十八页\总数六十九页\编于十八点通过共同的接口方法来对这些传入的对象进行统一操作。如果没有Collection接口,则在LinkedList中不得不这样写:PublicbooleanaddAll(intindex,Abstractlistc)PublicbooleanaddAll(intindex,AbstractSetc)PublicbooleanaddAll(intindex,ArrayListc)……接口声明能引用所有实现类对象,抽象类声明能引用所有具体类对象。39目前三十九页\总数六十九页\编于十八点接口在JAVA事件处理机制中的应用JAVA事件实现的机制,采用事件监听模式,能将事件发生对象和事件处理对象分开,而接口在这个方式中起到了很大的作用。基本过程如图所示如实例:6.11,6.1240目前四十页\总数六十九页\编于十八点5.2.8接口与抽象类比较
abstractclassComparable{publicabstractintcompareTo(Objectother);}classEmployeeextendsComparable{publicintcompareTo(Objectother){...}}
每个类只能继承一个类,但可以实现多个接口1语法上的不同41目前四十一页\总数六十九页\编于十八点抽象类接口共同点
二者都可具有抽象方法,都不能实例化,但都可以有自己的声明,并能引用子类或实现类对象。不同点属性变量可以有变量,没有限制
不能有,只能是静态常量。成员方法
可以有具体方法(而且具体方法可以调用抽象方法)。编译器不会自动添加任何修饰符,可以有抽象方法,也可没有抽象方法,若只要有一个抽象方法,则类就必须为抽象类所有接口中的方法均隐含为公有的和抽象的,编译器会自动添加修饰符.如果有方法,则全部是抽象方法。实现策略必须有子类继承必须有实现类实现42目前四十二页\总数六十九页\编于十八点抽象类接口不同点继承抽象类只能继承一个父类,但可以实现多个接口,其可以选择性地设计父类或父接口中的抽象方法接口可以继承多个来自不同继承树上的接口,但是其只能继承自接口,不能继承自类.继承后,不能设计其父接口中的方法,接口不能实现别的接口,即接口中不能出现implements关键字多态抽象类的引用可以指向其子类的对象,通过该引用可以访问子类中继承自该抽象类的所有属性和方法.接口类型的引用可以指向任何实现自该接口或实现自该接口的子接口的类,通过接口的引用可以访问其指向对角中的实现自接口的方法.扩展性弱强43目前四十三页\总数六十九页\编于十八点2、具体的含义不同抽象类更注重其是什么及其本质;而接口则不是,接口更注重其具有什么样的功能及其能充当什么样的角色。例如实例:Sample5_2可以飞的事物有很多,飞机、鸟或者超人。但是飞机的实质是个机械工具,需要汽油;而鸟与超人的实质是动物,需要进食。所以鸟可以继承自动物,但其可以扮演飞行器这个角色。超人??抽象类:物体的本质接口:物体可以充当的角色44目前四十四页\总数六十九页\编于十八点接口与抽象类
接口不是类,它需要类去实现,实现类和接口之间不是继承关系,而是实现与被实现的关系。因此当接口增加新方法时,完全可能通过接口的继承,将变化体现在子接口中,保证父接口的稳定,进而稳定父接口实现类和使用类。抽象类增加新方法,必定对继承抽象类的所有子类产生影响,如果在抽象类的继承体系中为增加新功能方法而增加新子类,同接口继承相比,抽象类继承相对复杂,不利于体系的进一步演化。45目前四十五页\总数六十九页\编于十八点接口与抽象类举例抽象类(abstractclass):家用电器(HomeAlliances)
接口(interface):音量调节(VolumeControl)
继承类:电视机(TV),洗衣机(Washing)
实现电视机的方法:
pulbicclassTVextendsHomeAlliancesimplementsVolumeControl{
}
实现洗衣机的方法(洗衣机不具有音量调节功能):
publicclassWashingextendsHomeAlliances{
}
大家可以细细体会抽象类同接口的区别。文章46目前四十六页\总数六十九页\编于十八点接口与回调回调一种常见的程序设计模式。利用回调技术可以处理这样的问题:
事件A发生时要执行处理事件A的代码,判断何时发生事件A及何时执行处理的代码。
这些代码是固定的,先行编写完毕,供使用。但事件A的处理代码开放给其它人编写,可以有很多不同的实现,使用时可以注册具体需要的实现来处理。如实例:sample5_347目前四十七页\总数六十九页\编于十八点5.3内部类内部类是定义在另一个类中的类为什么需要使用内部类?内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据.内部类可以对同一个包中的其他类隐藏起来.当想要定义一个回调函数前不想编写大量代码时,使用匿名内部类比较便捷.48目前四十八页\总数六十九页\编于十八点5.3内部类内部类分为四种:1)成员内部类,作为外部类的一个成员存在,与外部类的属性、方法并列。2)局部内部类,在方法中定义的内部类称为局部内部类。3)匿名内部类,没有名字的内部类。4)静态内部类,如果不需要内部类对象与外围类对象之间有联系,则声明为static49目前四十九页\总数六十九页\编于十八点5.3.1成员内部类语法Class<外部类>{[成员的访问限制修饰符][static]class<内部类>{//内部类的成员}//外部类的成员}成员内部类完全可以将其看成是外部类的一个成员,与普通成员的限制、修饰等都可加之于非静态成员内部类。在成员内部类类体中,一样有自己的成员变量和方法,可以用private、protected、public来修饰成员内部类。50目前五十页\总数六十九页\编于十八点5.3.1成员内部类publicclassOuter{//内部类publicclassInner{//内部类的成员inti=12;}//外部类的普通成员intcount=0;}51目前五十一页\总数六十九页\编于十八点成员内部类可以引用外部类的所有成员,包括被private修饰的如实例:o.java
classOuter{privateinta=10;voidf(){…}classInner{intd;publicInner(){d=a;f();}}}52目前五十二页\总数六十九页\编于十八点外部类与成员内部类定义的成员重名时,利用关键字this引用成员如实例TestOuterAndInner.java
53目前五十三页\总数六十九页\编于十八点Outer.javaclassOuter{inta;classInner{inta=20;voidf(){inta=10;System.out.println(a);
System.out.println(this.a);
System.out.println();}}}54目前五十四页\总数六十九页\编于十八点成员内部类的不能被static修饰,但允许静态常量存在成员.如实例o.java
classOuter{classInner{inta;//可以
voidf(){…}//可以
staticfinalintb=10;//可以
staticintc;//错误
staticvoidg(){….}//错误
}}55目前五十五页\总数六十九页\编于十八点内部类创建对象只有创建了外部类对象之后,才能创建内部类对象,才能使用内部类的成员。创建内部类对象的方式有2种:1、在外部类之内创建内部类对象。2、在外部类之外创建内部类对象。56目前五十六页\总数六十九页\编于十八点1、在外部类之内创建内部类对象在外部类中创建内部类对象的语法与创建普通对象的语法相同,即用new操作符调用相应的构造器即可。注意:非静态内部类是外部类的非静态成员,不能在静态上下文中使用。如sample5_4编译后产生几个类文件??
57目前五十七页\总数六十九页\编于十八点2、在外部类之外创建内部类对象<外部类类名>.<内部类类名>引用变量=<外部类类对象引用>.new<内部类构造器><外部类类名>.<内部类类名>引用变量=new<外部类构造器>.new<内部类构造器>两种含义相同如实例sample5_5
成员内部类实例:innerclass/Parcel3.javaTestOuterAndInner.java58目前五十八页\总数六十九页\编于十八点5.3.2局部内部类定义在方法中的内部类称为局部内部类。定义形式:
voidf(){classInner{…..}}59目前五十九页\总数六十九页\编于十八点与方法的局部变量类似,局部类不能用public或private修饰。局部类的作用域被限定在声明这个局部类的块中。局部类可以对外部世界完全隐藏,除了f()方法外,其他代码方法都不能访问局部类。60目前六十页\总数六十九页\编于十八点局部类可以访问外部类的所有属性和方法,包括private属性。局部类只能引用方法体内的常量,不能访问方法体内的局部变量。
61目前六十一页\总数六十九页\编于十八点实例
outter.java
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社群健康助理员操作评估模拟考核试卷含答案
- 烷基苯装置操作工安全实践竞赛考核试卷含答案
- 信息通信网络运行管理员岗前技能理论考核试卷含答案
- 美术颜料制造工操作能力竞赛考核试卷含答案
- 集材作业工复测能力考核试卷含答案
- 金华美术考试题目及答案
- 卫生法律法规考核试题及答案
- 电动力学基础题目及答案
- 中医科护理常规考核试题及答案
- 2020设计学博士面试劣势类问题应答技巧及答案
- 妇产科-滋养细胞疾病-课件
- 子女抚养权协议书
- 情志养生的方法
- 2022年全国青少年人工智能创新挑战赛考试题库(含答案)
- (完整)抗菌药物培训试题库及答案
- 葫芦岛连石化工有限责任公司年产3.5万吨苯二胺项目环评报告
- 部编人教版二年级语文下册《寓言二则》精美课件
- GB/T 470-2008锌锭
- 医疗质量与医疗安全管理-医疗风险防范与纠纷处理课件
- 初中 初一 劳动教育活动《维护保养自行车》第一课时 PPT 课件
- DBJ50-112-2016 现浇混凝土桥梁梁柱式模板支撑架安全技术规范
评论
0/150
提交评论