资源描述:
《第09章 抽象类和接口》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第9章抽象类和接口学习目标设计并使用抽象类Calendar类与GregorianCalendar类声明接口模拟多继承关系使用Comparable接口定义自然顺序了解抽象类与接口的异同声明自定义接口Cloneable接口包装类创建一般的排序方法JDK1.5基本数据类型与包装类之间自动转换2面向对象技术9.1引言抽象类(abstractclass)是指其表达的概念非常抽象,以至于它没有具体的实例.从几个类中派生出一个子类称为“多重继承”.Java的类不支持多重继承,称为“单继承”.Java中可以使用接口(interface)得到多重继承的效果.3面向对象技
2、术9.2抽象类抽象方法:只有方法头没有方法体.用abstract修饰.抽象类:用abstract修饰的类,不能用new创建对象.publicabstractclassTheAbstarctClass{……publicabstractvoidabstractMethod();……}4面向对象技术9.2抽象类什么时候需要设计并使用抽象类?以几何对象为例.许多几何对象,如圆、矩形和圆柱等,有很多共同的属性和行为,如共同的属性:使用特定颜色绘制,填充或不填充;共同的方法:计算面积和周长等.可以定义抽象类GeometricObject表示一般的几何对象概念,包含
3、共同的属性和方法.其他具体的几何对象可以作为该抽象类的子类,可以共享抽象父类中的属性和行为.5面向对象技术几何对象问题的UML类图斜体字表示是抽象类和抽象方法GeometricObject.javaCircle.javaRectangle.javaCylinder.java6面向对象技术9.2抽象类---注意问题非抽象类不能包含抽象方法.抽象类不能用new运算符实例化,但可以有构造方法.包含抽象方法的类必须是抽象的,但也允许声明没有抽象方法的抽象类.具体的父类也可以派生抽象的子类.子类可以将父类的具体方法覆盖为抽象方法.(少用)抽象类不能创建对象,但可
4、以声明对象引用.GeometricObject[]geo=newGeometricObject[10];例:使用GeometricObject类.TestGeometricObject.java7面向对象技术9.3Calendar与GregorianCalendarjava.util.Date,表示特定的瞬间,精确到毫秒.java.util.Calendar,抽象类,为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法.java.util.GregorianCal
5、endar,是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。8面向对象技术9.4接口接口(interface)是一种与类相似的结构,只包含常量和抽象方法.接口声明的语法修饰符interface接口名{/**常量声明*//**抽象方法声明*/}每个接口在编译时生成一个.class,接口不能用new创建对象实例.9面向对象技术9.4接口例:设计一个比较两个对象大小的一般方法.//interfaceforcomparingobjects,definedinjava.langpackagejava.lang;publ
6、icinterfaceComparable{publicintcompareTo(Objecto);}compareTo比较当前对象与参数对象的大小,返回值:负整数-当前对象小于参数对象0-相等正整数-当前对象大于参数对象10面向对象技术9.4接口定义一个max方法,使用Comparable接口.publicclassMax{publicstaticObjectmax(Objecto1,Objecto2){if((Comparableo1).compareTo(o2)>0)returno1;elsereturno2;}}Java类库中许多类实现了Com
7、parable接口,定义了自然顺序,因此可以使用max方法.Strings1=“abcdef”,s2=“abcdee”;Strings3=(String)Max.max(s1,s2);例如:11面向对象技术9.4.1实现接口一个类使用implements关键字实现一个或多个接口.修饰符class类名implements接口1,……,接口n{/**类体*/}关键字implements表示类继承了后面列出的每个接口中的所有常量,并实现接口的全部或部分方法.所谓“实现”是指在类中覆盖接口中声明的抽象方法.12面向对象技术9.4.1实现接口publicclas
8、sComparableRectangleextendsRectangleimplementsC