第六章接口与多态性_第1页
第六章接口与多态性_第2页
第六章接口与多态性_第3页
第六章接口与多态性_第4页
第六章接口与多态性_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 接口和程序包学习要点 多态性 抽象类 接口5.1 多态性 多态性概念: 在程序中同一符号或名字在不同情况下具有不同的语义解释,其有两种基本形式: l 编译时多态性: 在程序编译时可确定的多态性,由重载机制实现l 运行时多态性: 指程序动态运行时才可确定的多态性,由继承继承结合动态绑定动态绑定实现.5.1 多态性 绑定绑定 将一个名字与它的特性相关联的过程.静态绑定就是绑定过程在编译时进行,动态绑定就是绑定过程在运行时进行. 动态绑定动态绑定 先设计一个类层次,子类重定义超类的某些方法,然后使用超类类型的对象引用调用这些方法超类类型的对象引用调用这些方法,JVM根据这些对象引用的动态类型

2、选择所调用方法的版本,即如果该对象引用的是超类的对象实例,则调用超类定义的方法,如果引用的是子类的对象实例,则调用子类定义的方法.public class SuperClass public void firstMethod( ) secondMethod( ); public void secondMethod( ) System.out.println(“SuperClass .secondMethod( )”); public class SubClass extends SuperClass public void secondMethod( ) System.out.println(

3、“SubClass .secondMethod( )”); 则下述语句运行结果:SubClass subObj=new SubClass( );SuperClass superRef=subObj;superRef. firstMethod( );输出结果:SubClass .secondMethod( )5.2 抽象类 概念概念: : 只能被继承和扩充而不能创建自己的对象实例的类叫做抽象类。通常用做超类. 通过关键字通过关键字abstract abstract 进行标记将类声明为抽象进行标记将类声明为抽象public abstract class Drawing public abstrac

4、t void drawDot(int x, int y); public void drawLine(int x1, int y1, int x2, int y2) / draw using the drawDot() method /repeatedly. 一个一个abstract abstract 类可以包含非抽象方法和变量类可以包含非抽象方法和变量 抽象类只有被派生才能创建对象实例抽象类只有被派生才能创建对象实例. . 抽象方法只有被重定义才能给出其方法体抽象方法只有被重定义才能给出其方法体. . 例例:某公司要编写雇员工资支付程序某公司要编写雇员工资支付程序,不同的雇员按不同的方不同的

5、雇员按不同的方式支付工资式支付工资: 经理经理(Manager)每月获得固定工资每月获得固定工资; 销售员销售员(Salesman)每月基本工资每月基本工资+销售提成销售提成; 一般工人一般工人(Worker)按每月工作的天数计算工资按每月工作的天数计算工资Employee-namegetName( )computeSalary( )Manager -namemonthSalarygetName( )computeSalary( )Salesman-namebaseSalaryCommisionquantitygetName( )computeSalary( )Worker-namedaily

6、SalarydaysgetName( )computeSalary( )/ Employee.javapublic abstract class Employee private String name; public Employee(String name) =name; public String getName( ) return name; /计算雇员月工资的抽象方法 public abstract double computeSalary( ); class Manager extends Employee private double monthSalary;

7、public Manager(String name, double monthSalary) super(name);/调用超类构造函数 this.monthSalary=monthSalary; /重定义超类的抽象方法computeSalary public double computeSalary( ) return monthSalary; class Salesman extends Employee private double baseSalary;/基本工资 private double commision;/每件产品提成额 private int quantity; /销售的

8、产品数量 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; class Worker extends Employee private double dailySalary;/每天工资额 p

9、rivate int days; /每月工作的天数 public Worker(String name,double dailySalary,int days) super(name); this.dailySalary=dailySalary; this.days=days; public double computeSalary() return dailySalary*days; class Demo public static void main(String args)/超类数组,记录各种类型雇员 Employee data=new Employee4; data0=new Mana

10、ger(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(Employee data) for(int i=0;i程序包程序包(package)=编写大型编写大型java程序程序 弥补了类的单继承不能满足功能扩充的不足弥补了类的单继承不能满足功能扩充的不足5.3 接口 接口的

11、概念l 类的接口类的接口 供他类可访问的数据成员和方法成员l 类的实现接口类的实现接口 使用者与实现者之间的约束抽象-相当于纯抽象类 接口必须通过类来实现 接口提供一个观察类的角度一个类可以实现多个接口-多角度观察同一个事物一个接口类可以为多个类实现-同一个角度观察不同事物Java API标准接口 Serializable(可序列化的),Cloneable( 可克隆的) MouseListener(鼠标监听者) LayoutManager(布局管理者)5.3 接口 接口的声明 /Controllable.java public interface Controllable int OFF=0;

12、/静态变量,要初始化 int ON=1; void setPower(int on_or_off); boolean isPowerOn( ); 接口数据成员接口数据成员只能是公有的静只能是公有的静态常量数据态常量数据,可用可用public,static,final来修饰来修饰接口成员方法只接口成员方法只能是公有抽象方能是公有抽象方法法,只能用只能用public,abstract来来修饰修饰Pet示例 假设有一个超类FourLegged, Cat/Duck/Dog都继承它 又同时要扩展Pet 用C+,可以多重继承 用JAVA接口实现 示例interface Pet abstract publi

13、c void speak();class Dog implements Petpublic void speak()System.out.println(Woof);class Cat implements Petpublic void speak()System.out.println(Meow);class Duck implements Petpublic void speak()System.out.println(Quack);public class Animalspublic static void main(String agrs)Pet myPets=new Pet4;myP

14、ets0=new Duck();myPets1=new Cat();myPets2=new Duck();myPets3=new Dog();for(int index=0;index4;index+) myPetsindex.speak();接口的使用 声明希望一个或更多个类实现的方法 展示对象的编程接口而不显示类的内部主体结构 捕捉无关联的类之间的相似性而无须强制建立类关系 通过声明一个实现几个接口的类来模仿多重继承电视示例public interface Controllable int OFF=0;/静态变量,要初始化 int ON=1; void setPower(int on_or

15、_off); boolean isPowerOn( ); 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) Sy

16、stem.out.println(“请开启电视电源.”); power= Controllable.ON; else if(on_or_off= Controllable.OFF) System.out.println(“请开启电视电源.”); power= Controllable.ON; public boolean isPower( ) return (power=Controllable.ON); class ControllableDemopublic static void main( ) Television obj=new Television(“创维”); Controlla

17、ble ref=obj; ref.setPower( Controllable.ON); if(ref.isPowerOn( ) System.out.println(Television)ref).getTradeMark( )+”牌电视的电源已经开启”); else System.out.println(Television)ref).getTradeMark( )+”牌电视的电源已经关闭”); 5.3 接口 接口的继承 public interface TVController extends VideoController,AudioController . 接口与其祖先接口中含有同名

18、方法时接口与其祖先接口中含有同名方法时: 同形参同返回类型的方法看成同一个方法 不同形参的方法看成互为重载的不同方法 同形参不同返回类型的方法语法错误同形参不同返回类型的方法语法错误public interface SuperInterface int methodOne(int x); int methodTwo(int x); public interface SubInterfaceOne extends superInterface int methodOne(int x); int methodTwo(String name); String methodTwo(int x);/语法

19、错误 4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口定义定义: 包是一组相关的类或接口的集合, 它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口使用包的好处:使用包的好处:程序员能很容易确定同一包中的类是相互关联的。 程序员能很方便地了解到在哪里可以找到能完成特定功能的类 由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突 可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。/ClassOne.javapackage p

20、ackageOne;public class ClassOne public static void main(String args) System.out.println(“类类ClassOne属于程序包属于程序包packageOne!”); l编译:编译:javac ClassOne.javal运行:运行:java ClassOne( ) java packageOne. ClassOne(使用全名使用全名) 在当前目录下建在当前目录下建packageOne子子目录,并将目录,并将ClassOne.class文件拷入文件拷入 javac -d . ClassOne.java 自动建自动建

21、packageOne子子目目录并存入文件录并存入文件ClassOne.class4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口1. 创建包创建包格式:格式:package pkg1.pkg2.pkg3;package语句必须放在原文件的开始处。例如: java.io java.util java.lang java.applet javax.swingpackage graphics;public class Circle . . .4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口1. 创建包创建包说明:说明:package的作用域是整

22、个源文件 如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同 当未使用package语句时, 类和接口放在无名缺省包里 包的命名习惯:将Internet域名作为包名 例如:pany.region.package. 4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2. 包的使用包的使用 包中的所有类中只有public类能被包外部的类访问。有三种方法三种方法访问包中的类:1) 使用长名字引用包中的公共成员使用长名字引用包中的公共成员 即在类名前注明包名即在类名前注明包名例graphics.Rectanglegraphics

23、.Rectangle myRect = new graphics.Rectangle();4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2. 包的使用包的使用w引进包的公共成员引进包的公共成员 w 在文件的开始处使用import语句将指定的成员引进到当前文件中.格式:import pkg1.pkg2.类名例import graphics.Circle;Circle myCircle = new Circle();4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2. 包的使用包的使用3) 引进整个包引进整个包 使用import语句引进包中

24、的所有类和接口格式:import pkg1.pkg2.*例import graphics.*;现在可以使用短名字来引用类graphics包中的所有类. Circle myCircle = new Circle();Rectangle myRectangle = new Rectangle();4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理源文件和类文件的管理 JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如: 4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理源文件和类文件的管理 4.4 包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3. 源文件和类文件的管理源文件和类文件的管理 当源文件中有多个类定义时,编译后将产生多个类文件。 4.4 包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论