版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章接口和程序包
学习要点多态性抽象类接口5.1多态性多态性概念:
在程序中同一符号或名字在不同情况下具有不同的语义解释,其有两种基本形式:
编译时多态性:在程序编译时可确定的多态性,由重载机制实现运行时多态性:指程序动态运行时才可确定的多态性,由继承结合动态绑定实现.5.1多态性绑定
将一个名字与它的特性相关联的过程.静态绑定就是绑定过程在编译时进行,动态绑定就是绑定过程在运行时进行.动态绑定
先设计一个类层次,子类重定义超类的某些方法,然后使用超类类型的对象引用调用这些方法,JVM根据这些对象引用的动态类型选择所调用方法的版本,即如果该对象引用的是超类的对象实例,则调用超类定义的方法,如果引用的是子类的对象实例,则调用子类定义的方法.publicclassSuperClass{publicvoidfirstMethod(){secondMethod();}publicvoidsecondMethod(){System.out.println(“SuperClass.secondMethod()”);}}publicclassSubClassextendsSuperClass{publicvoidsecondMethod(){System.out.println(“SubClass.secondMethod()”);}}则下述语句运行结果:SubClass
subObj=newSubClass();SuperClass
superRef=subObj;superRef.firstMethod();输出结果:SubClass.secondMethod()5.2抽象类概念:
只能被继承和扩充而不能创建自己的对象实例的类叫做抽象类。通常用做超类.通过关键字abstract进行标记将类声明为抽象publicabstractclassDrawing{
publicabstractvoiddrawDot(intx,inty);publicvoiddrawLine(intx1,inty1,
intx2,inty2){//drawusingthedrawDot()method//repeatedly.}}一个abstract类可以包含非抽象方法和变量抽象类只有被派生才能创建对象实例.
抽象方法只有被重定义才能给出其方法体.例:某公司要编写雇员工资支付程序,不同的雇员按不同的方式支付工资:经理(Manager)每月获得固定工资;销售员(Salesman)每月基本工资+销售提成;一般工人(Worker)按每月工作的天数计算工资Employee---------------------namegetName()computeSalary()Manager
---------------------namemonthSalarygetName()computeSalary()Salesman---------------------namebaseSalaryCommisionquantitygetName()computeSalary()Worker---------------------namedailySalarydaysgetName()computeSalary()//Employee.javapublicabstractclassEmployee{privateStringname;publicEmployee(Stringname){=name;}publicStringgetName(){returnname;}//计算雇员月工资的抽象方法publicabstractdoublecomputeSalary();}classManagerextendsEmployee{privatedoublemonthSalary;publicManager(Stringname,doublemonthSalary){
super(name);//调用超类构造函数
this.monthSalary=monthSalary;}//重定义超类的抽象方法computeSalarypublicdoublecomputeSalary(){ returnmonthSalary;}}
classSalesmanextendsEmployee{privatedoublebaseSalary;//基本工资privatedoublecommision;//每件产品提成额privateintquantity;//销售的产品数量publicSalesman(String
name,double
baseSalary,doublecommision,intquantity){
super(name);
this.baseSalary=baseSalary;
mision=commision;
this.quantity=quantity;}publicdoublecomputeSalary(){ returnbaseSalary+commision*quantity;}}classWorkerextendsEmployee{privatedoubledailySalary;//每天工资额privateintdays;//每月工作的天数publicWorker(String
name,double
dailySalary,intdays){
super(name);
this.dailySalary=dailySalary;
this.days=days;}publicdoublecomputeSalary(){ returndailySalary*days;}}classDemo{publicstaticvoidmain(String[]args){//超类数组,记录各种类型雇员 Employee[]data=newEmployee[4]; data[0]=newManager("Manager",10000); data[1]=newSalesman("Salesman",3000,200,12); data[2]=newWorker("WorkerZhang",200,25); data[3]=newWorker("WorkerLi",250,26);
displaySalary(data);}publicstaticvoiddisplaySalary(Employee[]data){
for(inti=0;i<data.length;i++){System.out.println("雇员"+data[i].getName()+"的月工资是"+data[i].computeSalary());}}}data数组是典型的多态数据结构(容器数据结构),可存放各种类型的雇员displaySalary()中调用data[i].computeSalary()会根据data[i]的动态类型调用相应雇员的computeSalary()这种动态特性使程序扩充十分方便如:将一般雇员再细分为计时雇员(DailyWorker)和计件雇员(PieceWorker),则可取消类Worker,重新派生两个类DailyWorker
和PieceWorker,重定义computeSalary方法并编译即可,无需重新编译displaySalary(),只要data数组中存放这两种类型的雇员时,仍可正确计算其工资.程序总结:5.3接口JAVA程序的基本单位类(class)接口(interface)-----------也是一种数据类型使用接口原因类+接口=>程序包(package)=>编写大型java程序弥补了类的单继承不能满足功能扩充的不足5.3接口接口的概念类的接口
供他类可访问的数据成员和方法成员类的实现接口
使用者与实现者之间的约束抽象---相当于纯抽象类接口必须通过类来实现接口提供一个观察类的角度一个类可以实现多个接口-------多角度观察同一个事物一个接口类可以为多个类实现------同一个角度观察不同事物JavaAPI标准接口
Serializable(可序列化的),Cloneable(可克隆的)
MouseListener(鼠标监听者)LayoutManager(布局管理者)5.3接口接口的声明//Controllable.javapublicinterfaceControllable{intOFF=0;//静态变量,要初始化
intON=1;voidsetPower(int
on_or_off);
boolean
isPowerOn();}接口数据成员只能是公有的静态常量数据,可用public,static,final来修饰接口成员方法只能是公有抽象方法,只能用public,abstract来修饰Pet示例假设有一个超类FourLegged,Cat/Duck/Dog都继承它又同时要扩展Pet用C++,可以多重继承用JAVA接口实现示例interfacePet{ abstractpublicvoidspeak();}classDogimplementsPet{ publicvoidspeak() {
System.out.println("Woof"); }}classCatimplementsPet{ publicvoidspeak() {
System.out.println("Meow"); }}classDuckimplementsPet{ publicvoidspeak() {
System.out.println("Quack"); }}publicclassAnimals{ publicstaticvoidmain(String[]agrs) { PetmyPets[]=newPet[4]; myPets[0]=newDuck(); myPets[1]=newCat(); myPets[2]=newDuck(); myPets[3]=newDog();
for(intindex=0;index<4;index++)
myPets[index].speak(); }}接口的使用声明希望一个或更多个类实现的方法展示对象的编程接口而不显示类的内部主体结构捕捉无关联的类之间的相似性而无须强制建立类关系通过声明一个实现几个接口的类来模仿多重继承电视示例publicinterfaceControllable{intOFF=0;//静态变量,要初始化
intON=1;voidsetPower(int
on_or_off);
boolean
isPowerOn();}classTelevisionimplementsControllable{privateintpower=Controllable.OFF;privateStringtradeMark=“”;publicTelevision(Stringmark){tradeMark=mark;}publicStringgetTrademark(){returntradeMark;}publicvoidsetPower(int
on_or_off){if(on_or_off==Controllable.ON){System.out.println(“请开启电视电源….”);power=Controllable.ON;}elseif(on_or_off==Controllable.OFF){System.out.println(“请开启电视电源….”);power=Controllable.ON;}}}publicboolean
isPower(){return(power==Controllable.ON);}}classControllableDemo{publicstaticvoidmain(){Televisionobj=newTelevision(“创维”);Controllableref=obj;
ref.setPower(Controllable.ON);
if(ref.isPowerOn())
System.out.println(((Television)ref).getTradeMark()+”牌电视的电源已经开启”);else
System.out.println(((Television)ref).getTradeMark()+”牌电视的电源已经关闭”);}}5.3接口接口的继承
publicinterfaceTVControllerextendsVideoController,AudioController{…...}接口与其祖先接口中含有同名方法时:同形参同返回类型的方法看成同一个方法不同形参的方法看成互为重载的不同方法
同形参不同返回类型的方法语法错误publicinterfaceSuperInterface{
int
methodOne(intx);
int
methodTwo(intx);}publicinterfaceSubInterfaceOneextendssuperInterface{
int
methodOne(intx);
int
methodTwo(Stringname);StringmethodTwo(intx);//语法错误}
4.4包的创建和使用第四章java
中的对象、类、包和接口定义:
包是一组相关的类或接口的集合,它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。
4.4包的创建和使用第四章java
中的对象、类、包和接口使用包的好处:程序员能很容易确定同一包中的类是相互关联的。
程序员能很方便地了解到在哪里可以找到能完成特定功能的类由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。//ClassOne.javapackagepackageOne;publicclassClassOne{publicstaticvoidmain(String[]args){
System.out.println(“类ClassOne属于程序包packageOne!”);}}编译:javac
ClassOne.java运行:①javaClassOne()②javapackageOne.ClassOne(使用全名)③在当前目录下建packageOne子目录,并将ClassOne.class文件拷入④javac-d.ClassOne.java
自动建packageOne子目录并存入文件ClassOne.class
4.4包的创建和使用第四章java
中的对象、类、包和接口1.创建包 格式:packagepkg1[.pkg2[.pkg3]];
package语句必须放在原文件的开始处。例如:
java.io
java.util
java.lang
java.appletjavax.swingpackagegraphics;publicclassCircle{...}
4.4包的创建和使用第四章java
中的对象、类、包和接口1.创建包说明:package的作用域是整个源文件如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同当未使用package语句时,类和接口放在无名缺省包里包的命名习惯:将Internet域名作为包名
例如:pany.region.package.
4.4包的创建和使用第四章java
中的对象、类、包和接口2.包的使用包中的所有类中只有public类能被包外部的类访问。有三种方法访问包中的类:1)使用长名字引用包中的公共成员即在类名前注明包名例graphics.Rectanglegraphics.RectanglemyRect=newgraphics.Rectangle();
4.4包的创建和使用第四章java
中的对象、类、包和接口2.包的使用引进包的公共成员
在文件的开始处使用import语句将指定的成员引进到当前文件中.格式:importpkg1[.pkg2].类名例importgraphics.Circle;CirclemyCircle=newCircle();
4.4包的创建和使用第四章java
中的对象、类、包和接口2.包的使用3)引进整个包
使用import语句引进包中的所有类和接口格式:importpkg1[.pkg2].*例importgraphics.*;现在可以使用短名字来引用类graphics包中的所有类.CirclemyCircle=newCircle();RectanglemyRectangle=newRectangle();
4.4包的创建和使用第四章java
中的对象、类、包和接口3.源文件和类文件的管理
JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如:
4.4包的创建和使用第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医生办公室工作制度
- 医院艾灸室工作制度
- 医院农合办工作制度
- 医院蜡疗室工作制度
- 十米河长制工作制度
- 单位治保组工作制度
- 卫健局保密工作制度
- 卫生站药房工作制度
- 卫生院死因工作制度
- 印刷厂财务工作制度
- 党建试题库及答案
- 2026贵州高速公路集团秋招面笔试题及答案
- 2026广东东莞市常平镇编外聘用人员招聘5人笔试参考试题及答案解析
- 2025年锦泰保险春招校招笔试通过率90%的刷题题库带答案
- 2026云南楚雄州南华县国有资本管理有限公司招聘13人备考题库及答案详解(新)
- 2026年及未来5年市场数据中国危废专业焚烧市场运行态势及行业发展前景预测报告
- 湖北省孝感市楚天协作体高三下学期3月联考英语+答案
- 钢筋桁架楼承板设计手册
- 军用关键软硬件自主可控产品名录(2025年v1版)
- 【道法】权利与义务相统一教学课件-2025-2026学年统编版道德与法治八年级下册
- 2026年初级社会工作者综合能力全国考试题库(含答案)
评论
0/150
提交评论