第10章抽象类和接口课件

上传人:我*** 文档编号:141077582 上传时间:2020-08-04 格式:PPT 页数:40 大小:338.50KB
返回 下载 相关 举报
第10章抽象类和接口课件_第1页
第1页 / 共40页
第10章抽象类和接口课件_第2页
第2页 / 共40页
第10章抽象类和接口课件_第3页
第3页 / 共40页
第10章抽象类和接口课件_第4页
第4页 / 共40页
第10章抽象类和接口课件_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第10章抽象类和接口课件》由会员分享,可在线阅读,更多相关《第10章抽象类和接口课件(40页珍藏版)》请在金锄头文库上搜索。

1、第10章 抽象类和接口,10.1 引言 10.2 抽象类 10.3 日历类Calendar和公历类GregorianCanlendar 10.4 接口 10.5 将基本数据类型值处理为对象 10.6 基本类型和包装类之间的自动转换,10.1 引言,抽象类:将父类设计得非常抽象,让它包含所有子类的共同属性、方法,以至于它没有具体的实例。 接口:实现多重继承,10.2 抽象类,存在意义 抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化的特征 抽象类中可以包括被它的所有子类共享的公共行为 抽象类中可以包括被它的所有子类共享的公共属性 在程序中不能用抽象类作为模板来创建对象; 在

2、用户生成实例时强迫用户生成更具体的实例,保证代码的安全性,抽象类的格式abstract class 类名 抽象方法的语法形式为 abstract (.); 抽象方法的优点 隐藏具体的细节信息,所有的子类使用的都是相同的方法头,其中包含了调用该方法时需要了解的全部信息 强迫子类完成指定的行为,规定其子类需要用到的“标准”行为 通用程序设计(一般程序设计),例1,问:抽象类GeometricObject中的抽象方法可否删除?,各种图形都需要实现绘图方法,可在抽象父类中声明一个draw抽象方法 abstract class GraphicObject int x, y; void moveTo(in

3、t X, int Y) . . . abstract void draw(); 然后在每一个子类中重写draw方法,例如: class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . ,public class Test public static void main() GraphicObject ob1=Cirlce(); GraphicObject ob2=Cirlce(); ob1.draw(); ob2.draw(); ,例2,

4、将所有图形的公共属性及方法抽象到抽象类Shape。再将2D及3D对象的特性分别抽取出来,形成两个抽象类TwoDimensionalShape及ThreeDimensionalShape 2D图形包括Circles、Triangles、Rectangles和Squares 3D图形包括Cube、Sphere、或Tetrahedron 在UML中,抽象类的类名为斜体,以与具体类相区别,例3,贷款(Loan)分为许多种类,如租借(Lease)、抵押(Mortgage)、房屋贷款(HouseLoan)、汽车贷款(CarLoan)等 将Loan声明为抽象类,并指定所有的子类对象都应具有的行为,如计算月还

5、款值(calculateMonthlyPayment),还款(makePayment),取得客户信息(getClientInfo),其中前两个因贷款种类不同计算方法也不同,可声明为抽象方法,Loan的所有子类都必须对这两个抽象方法进行重写 public abstract class Loan public abstract float calculateMonthlyPayment(); public abstract void makePayment(float amount); public Client getClientInfo() ,例4,注意: 1 抽象类前需加修饰符abstrac

6、t 2 不能使用new方法进行实例化,故,抽象类必须被继承 3 抽象类可包含常规类能够包含的任何东西,例如构造方法等非抽象方法,其构造方法在子类的构造方法中调用 4 没有抽象方法的类也可被声明为抽象类 5 包含抽象方法的类必须声明为抽象类 6 若子类没有实现父类的全部抽象方法,它也必须声明为抽象类 7 抽象方法必须是非静态的,子类中的实现也必须是非静态的,否则无法覆盖 8 即便父类是具体类,子类也可能是抽象类 9 抽象类虽然无法用new实例化,但可以用作数据类型 例:抽象类 x; 抽象类 a5=new 抽象类5; x=new 子类();ai=new 子类();,10.3 日历类Calendar

7、和公历类GregorianCanlendar,10.4 接口,Java不支持多重继承,是为了使语言本身结构简单,层次清楚,易于管理,更安全可靠,避免冲突。但同时也就限制了语言的功能。 为了在实际应用中借助多重继承的功能,共享一些公用的常量和一些常用的方法,Java使用接口来弥补。一个类可以实现多个接口,达到多重继承的效果。 接口可以看作是常量和没有实现的方法的集合。 接口与抽象类相似,接口中的方法只是做了声明,而没有定义任何具体的操作方法。,声明接口的格式,修饰符 interface 接口名 /*常量*/ /*抽象方法*/ ,方法自动为public abstract,变量自动为public s

8、tatic final,public interface Comparable public int compareTo(Object); ,例如,package java.lang,public final class String extends Object implements Serializable, Comparable, CharSequence public int compareTo(String anotherString) ,public class Date extends Object implements Serializable, Cloneable, Comp

9、arable public int compareTo(DateanotherDate) ,类java.lang.String和Java.util.Date都实现了Comparable接口,右边的表达式都成立,s instanceof String s instanceof Object s instanceof Comparable,pareTo(“china”) 返回0 “china”.compareTo(s)返回0 “china”.compareTo(“japan”)返回-7,public class Max public static Comparable max(Comparable

10、 o1, Comparable o2) if(pareTo(o2)0) return o1; else return o2; ,应用:例如 String maxString=(String)Max.max(s,”japan”),若String s=“china”;应用例如,P277的图a和图b 问:为什么说图a更鲁棒?,接口 与抽象类一样都是定义多个类的共同属性 使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现 允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体。方法自动为public abstract 也可以包含基本数据类型的数据成员,但

11、它们都自动为public static final,接口允许我们在看起来不相干的对象之间定义共同行为,接口的作用 是面向对象的一个重要机制 实现多继承,同时免除C+中的多继承那样的复杂性 建立类和类之间的“协议” 把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节 实现不同类之间的常量共享,接口的语法 声明格式为 public interface 接口名称 extends 父接口名 /方法的原型声明或静态常量 接口的数据成员一定要赋初值,且此值将不能再更改,允许省略public static final关键字 接口中的方法必须是“抽象方法

12、”,不能有方法体,允许省略public abstract关键字,接口也可以继承,接口的实现,接口的实现 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 利用接口设计类的过程,称为接口的实现,使用implements关键字 语法如下 public class 类名称 implements 接口名称 /* Bodies for the interface methods */ /* Own data and methods. */ 必须实现接口中的所有方法 实现接口的方法必须声明成public,例1,声明一个接口Shape2D,可利用它来实现二维的几何形状类Cir

13、cle和Rectangle 把计算面积的方法声明在接口里 pi值是常量,把它声明在接口的数据成员里 interface Shape2D /声明Shape2D接口 final double pi=3.14; /数据成员一定要初始化 public abstract double area();/抽象方法 在接口的声明中,允许省略一些关键字,也可声明如下 interface Shape2D double pi=3.14; double area(); ,例2,class Circle implements Shape2D double radius; public Circle(double r)

14、radius=r; public double area() return (pi * radius * radius); ,class Rectangle implements Shape2D int width,height; public Rectangle(int w,int h) width=w; height=h; public double area() return (width * height); ,声明Circle与Rectangle两个类实现Shape2D接口,测试类 public class InterfaceTester public static void mai

15、n(String args) Rectangle rect=new Rectangle(5,6); System.out.println(Area of rect = + rect.area(); Circle cir=new Circle(2.0); System.out.println(Area of cir = + cir.area(); 运行结果 Area of rect = 30.0 Area of cir = 12.56,声明接口类型的变量,并用它来访问对象 public class VariableTester public static void main(String arg

16、s) Shape2D var1,var2; var1=new Rectangle(5,6); System.out.println(Area of var1 = + var1.area(); var2=new Circle(2.0); System.out.println(Area of var2 = + var2.area(); 输出结果 Area of var1 = 30.0 Area of var2 = 12.56,多重继承 Java的设计以简单实用为导向,不允许一个类有多个父类 但允许一个类可以实现多个接口,通过这种机制可实现多重继承 一个类实现多个接口的语法如下 类修饰符 class 类名称 implements 接口1,接口2, ,Car类可以实现接口Insurable,Drivable,Sellable public class Car implements In

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号