




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、接口和多态性第1页,共44页,2022年,5月20日,15点1分,星期三5.1 多态性多态性概念: 在程序中同一符号或名字在不同情况下具有不同的语义解释,其有两种基本形式: 编译时多态性: 在程序编译时可确定的多态性,由重载机制实现运行时多态性: 指程序动态运行时才可确定的多态性,由继承结合动态绑定实现.第2页,共44页,2022年,5月20日,15点1分,星期三5.1 多态性绑定 将一个名字与它的特性相关联的过程.静态绑定就是绑定过程在编译时进行,动态绑定就是绑定过程在运行时进行.动态绑定 先设计一个类层次,子类重定义超类的某些方法,然后使用超类类型的对象引用调用这些方法,JVM根据这些对象
2、引用的动态类型选择所调用方法的版本,即如果该对象引用的是超类的对象实例,则调用超类定义的方法,如果引用的是子类的对象实例,则调用子类定义的方法.第3页,共44页,2022年,5月20日,15点1分,星期三public class SuperClass public void firstMethod( ) secondMethod( ); public void secondMethod( ) System.out.println(“SuperClass .secondMethod( )”); public class SubClass extends SuperClass public voi
3、d secondMethod( ) System.out.println(“SubClass .secondMethod( )”); 则下述语句运行结果:SubClass subObj=new SubClass( );SuperClass superRef=subObj;superRef. firstMethod( );输出结果:SubClass .secondMethod( )第4页,共44页,2022年,5月20日,15点1分,星期三5.2 抽象类概念: 只能被继承和扩充而不能创建自己的对象实例的类叫做抽象类。通常用做超类.通过关键字abstract 进行标记将类声明为抽象public a
4、bstract class Drawing public abstract void drawDot(int x, int y); public void drawLine(int x1, int y1, int x2, int y2) / draw using the drawDot() method /repeatedly. 一个abstract 类可以包含非抽象方法和变量抽象类只有被派生才能创建对象实例. 抽象方法只有被重定义才能给出其方法体.第5页,共44页,2022年,5月20日,15点1分,星期三例:某公司要编写雇员工资支付程序,不同的雇员按不同的方式支付工资: 经理(Manage
5、r)每月获得固定工资; 销售员(Salesman)每月基本工资+销售提成; 一般工人(Worker)按每月工作的天数计算工资第6页,共44页,2022年,5月20日,15点1分,星期三Employee-namegetName( )computeSalary( )Manager -namemonthSalarygetName( )computeSalary( )Salesman-namebaseSalaryCommisionquantitygetName( )computeSalary( )Worker-namedailySalarydaysgetName( )computeSalary( )第
6、7页,共44页,2022年,5月20日,15点1分,星期三/ Employee.javapublic abstract class Employee private String name; public Employee(String name) =name; public String getName( ) return name; /计算雇员月工资的抽象方法 public abstract double computeSalary( ); 第8页,共44页,2022年,5月20日,15点1分,星期三class Manager extends Employee private double
7、 monthSalary; public Manager(String name, double monthSalary) super(name);/调用超类构造函数 this.monthSalary=monthSalary; /重定义超类的抽象方法computeSalary public double computeSalary( ) return monthSalary; 第9页,共44页,2022年,5月20日,15点1分,星期三 class Salesman extends Employee private double baseSalary;/基本工资 private double
8、commision;/每件产品提成额 private int quantity; /销售的产品数量 public Salesman(String name,double baseSalary, double commision,int quantity) super(name); this.baseSalary=baseSalary; mision=commision; this.quantity=quantity; public double computeSalary() return baseSalary+ commision*quantity; 第10页,共44页,2022年,5月20
9、日,15点1分,星期三class Worker extends Employee private double dailySalary;/每天工资额 private int days; /每月工作的天数 public Worker(String name,double dailySalary,int days) super(name); this.dailySalary=dailySalary; this.days=days; public double computeSalary() return dailySalary*days; 第11页,共44页,2022年,5月20日,15点1分,星
10、期三class Demo public static void main(String args)/超类数组,记录各种类型雇员 Employee data=new Employee4; data0=new Manager(Manager,10000); data1=new Salesman(Salesman,3000,200,12); data2=new Worker(Worker Zhang,200,25); data3=new Worker(Worker Li,250,26); displaySalary(data); public static void displaySalary(Em
11、ployee data) for(int i=0;i程序包(package)=编写大型java程序 弥补了类的单继承不能满足功能扩充的不足第14页,共44页,2022年,5月20日,15点1分,星期三5.3 接口接口的概念类的接口 供他类可访问的数据成员和方法成员类的实现接口 使用者与实现者之间的约束抽象-相当于纯抽象类 接口必须通过类来实现 接口提供一个观察类的角度一个类可以实现多个接口-多角度观察同一个事物一个接口类可以为多个类实现-同一个角度观察不同事物Java API标准接口 Serializable(可序列化的),Cloneable( 可克隆的) MouseListener(鼠标监听
12、者) LayoutManager(布局管理者)第15页,共44页,2022年,5月20日,15点1分,星期三5.3 接口接口的声明 /Controllable.java public interface Controllable int OFF=0;/静态变量,要初始化 int ON=1; void setPower(int on_or_off); boolean isPowerOn( ); 接口数据成员只能是公有的静态常量数据,可用public,static,final来修饰接口成员方法只能是公有抽象方法,只能用public,abstract来修饰第16页,共44页,2022年,5月20日,
13、15点1分,星期三Pet示例假设有一个超类FourLegged, Cat/Duck/Dog都继承它 又同时要扩展Pet用C+,可以多重继承用JAVA接口实现示例第17页,共44页,2022年,5月20日,15点1分,星期三interface Pet abstract public void speak();class Dog implements Petpublic void speak()System.out.println(Woof);第18页,共44页,2022年,5月20日,15点1分,星期三class Cat implements Petpublic void speak()Syst
14、em.out.println(Meow);class Duck implements Petpublic void speak()System.out.println(Quack);第19页,共44页,2022年,5月20日,15点1分,星期三public class Animalspublic static void main(String agrs)Pet myPets=new Pet4;myPets0=new Duck();myPets1=new Cat();myPets2=new Duck();myPets3=new Dog();for(int index=0;index4;index
15、+) myPetsindex.speak();第20页,共44页,2022年,5月20日,15点1分,星期三接口的使用声明希望一个或更多个类实现的方法展示对象的编程接口而不显示类的内部主体结构捕捉无关联的类之间的相似性而无须强制建立类关系通过声明一个实现几个接口的类来模仿多重继承第21页,共44页,2022年,5月20日,15点1分,星期三电视示例public interface Controllable int OFF=0;/静态变量,要初始化 int ON=1; void setPower(int on_or_off); boolean isPowerOn( ); 第22页,共44页,20
16、22年,5月20日,15点1分,星期三class Television implements Controllable private int power= Controllable.OFF; private String tradeMark=“”; public Television(String mark) tradeMark=mark; public String getTrademark( ) return tradeMark;public void setPower(int on_or_off) if (on_or_off= Controllable.ON) System.out.p
17、rintln(“请开启电视电源.”); power= Controllable.ON; else if(on_or_off= Controllable.OFF) System.out.println(“请开启电视电源.”); power= Controllable.ON; 第23页,共44页,2022年,5月20日,15点1分,星期三public boolean isPower( ) return (power=Controllable.ON); class ControllableDemopublic static void main( ) Television obj=new Televi
18、sion(“创维”); Controllable ref=obj; ref.setPower( Controllable.ON); if(ref.isPowerOn( ) System.out.println(Television)ref).getTradeMark( )+”牌电视的电源已经开启”); else System.out.println(Television)ref).getTradeMark( )+”牌电视的电源已经关闭”); 第24页,共44页,2022年,5月20日,15点1分,星期三5.3 接口接口的继承 public interface TVController exte
19、nds VideoController,AudioController . 接口与其祖先接口中含有同名方法时: 同形参同返回类型的方法看成同一个方法 不同形参的方法看成互为重载的不同方法 同形参不同返回类型的方法语法错误第25页,共44页,2022年,5月20日,15点1分,星期三public interface SuperInterface int methodOne(int x); int methodTwo(int x); public interface SubInterfaceOne extends superInterface int methodOne(int x); int m
20、ethodTwo(String name); String methodTwo(int x);/语法错误 第26页,共44页,2022年,5月20日,15点1分,星期三第27页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口定义: 包是一组相关的类或接口的集合, 它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。第28页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口使用包的好处:程序员能很容易确定同一包中的类是相互关联的。 程序员能很方
21、便地了解到在哪里可以找到能完成特定功能的类 由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突 可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。第29页,共44页,2022年,5月20日,15点1分,星期三/ClassOne.javapackage packageOne;public class ClassOne public static void main(String args) System.out.println(“类ClassOne属于程序包packageOne!”); 编译:javac ClassOne.java运行:java C
22、lassOne( ) java packageOne. ClassOne(使用全名) 在当前目录下建packageOne子目录,并将ClassOne.class文件拷入 javac -d . ClassOne.java 自动建packageOne子目录并存入文件ClassOne.class第30页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口1. 创建包格式:package pkg1.pkg2.pkg3;package语句必须放在原文件的开始处。例如: java.io java.util java.lang java.app
23、let javax.swingpackage graphics;public class Circle . . .第31页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口1. 创建包说明:package的作用域是整个源文件 如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同 当未使用package语句时, 类和接口放在无名缺省包里 包的命名习惯:将Internet域名作为包名 例如:. 第32页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 j
24、ava 中的对象、类、包和接口2. 包的使用 包中的所有类中只有public类能被包外部的类访问。有三种方法访问包中的类:1) 使用长名字引用包中的公共成员 即在类名前注明包名例graphics.Rectanglegraphics.Rectangle myRect = new graphics.Rectangle();第33页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口2. 包的使用引进包的公共成员 在文件的开始处使用import语句将指定的成员引进到当前文件中.格式:import pkg1.pkg2.类名例import
25、graphics.Circle;Circle myCircle = new Circle();第34页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口2. 包的使用3) 引进整个包 使用import语句引进包中的所有类和接口格式:import pkg1.pkg2.*例import graphics.*;现在可以使用短名字来引用类graphics包中的所有类. Circle myCircle = new Circle();Rectangle myRectangle = new Rectangle();第35页,共44页,2022
26、年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理 JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如: 第36页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理 第37页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理 当源文件中有多个类定义时,编译后将产生多个类文件。 第38页,共44页,2022年,5月20日,15点1分,星期三4.4 包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理 虽然类文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理安全事件应对试题及答案总结
- 审计师学习资源试题及答案共享
- 人力资源与财务管理的协同试题及答案
- 建筑工程设计与施工配合试题及答案
- 初级审计师重要概念梳理试题及答案
- 常见药物作用与护理试题及答案
- 会计职业培训的重要性及模式试题及答案
- 有效的复习资源分享试题及答案2025
- 2025年中级会计备考必看试题及答案
- 护理知识普及试题及答案
- 美容美发股东合同和合伙协议
- 2024年湖北省襄阳县事业单位公开招聘医疗卫生岗笔试题带答案
- 2025-2030中国黑小麦行业深度分析及发展趋势与投资战略研究报告
- 《皮肤修复机制》课件
- 回访岗管理制度
- 2025年医院VTE防治培训计划
- 云南三支一扶考试试题及答案
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 国家最新煤的发热量测定方法
- 超星尔雅学习通《美的历程美学导论》章节测试含答案
- 危重病人床头交接班记录(样本)
评论
0/150
提交评论