第4章接口、内部类和包.ppt

上传人:本田雅阁 文档编号:3429987 上传时间:2019-08-24 格式:PPT 页数:55 大小:1.58MB
返回 下载 相关 举报
第4章接口、内部类和包.ppt_第1页
第1页 / 共55页
第4章接口、内部类和包.ppt_第2页
第2页 / 共55页
第4章接口、内部类和包.ppt_第3页
第3页 / 共55页
第4章接口、内部类和包.ppt_第4页
第4页 / 共55页
第4章接口、内部类和包.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《第4章接口、内部类和包.ppt》由会员分享,可在线阅读,更多相关《第4章接口、内部类和包.ppt(55页珍藏版)》请在三一文库上搜索。

1、1,第4章 接口、内部类和包,4.1 接口 4.2 内部类 4.3 包 4.4 Java API基础,2,4.1 接口,4.1.1 接口与实现接口的类 4.1.2 用接口实现多重继承,3,4.1 接口,接口(interface):是一组常量和抽象方法的集合。 是一种引用数据类型。,关于接口: 用于描述抽象的概念; 约定多个类共同使用的常量和抽象方法; 抽象方法的具体实现由实现接口的类完成; 实现接口的类必须覆盖接口中的所有抽象方法。,4,1. 声明接口,public interface 接口 extends 父接口 public static final 数据类型 成员变量=常量值; publ

2、ic abstract 返回值类型 成员方法(参数列表); ,4.1.1 接口与实现接口的类,例如 public interface Plane1 /平面图形接口 public abstract double area(); /计算面积 ,5,2. 声明实现接口的类,4.1.1 接口与实现接口的类,修饰符class 类 extends 父类implements 接口列表,例如 public class Rectangle2 implements PlaneGraphics2,注意: 一个类可以实现一个或多个接口,如果一个类实现多个 接口,则声明时必须用逗号分隔每个接口名。,6,4.1.1 接口

3、与实现接口的类,3. 接口的作用,方法声明接口中声明的抽象方法约定了多个类共用的 方法声明, 方法实现每个实现接口的类可以根据自身的实际情况, 给出抽象方法的具体实现。,接口提供方法声明与方法实现相分离的机制, 使多个类之间表现出共同的行为能力。, 接口中的一个抽象方法在实现接口的多个类中表现出多态性。,7,3. 接口的作用,4.1.1 接口与实现接口的类,图4.1 图形接口与实现图形接口的类,8,4.1.1 接口与实现接口的类,3. 接口的作用,【例4.1】图形接口与实现图形接口的类。,设计平面图形接口PlaneGraphics2。 设计长方形类Rectangle2,实现平面图形接口。,9,

4、4. 接口的特点,4.1.1 接口与实现接口的类,(1) 接口及接口中成员的访问权限都是public,(2) 接口中的成员方法都是公有的、抽象的实例成员方法,(3) 接口中的所有抽象方法必须全部被实现接口的类覆盖,一个 非抽象类如果声明实现一个接口,则该类必须覆盖 接口中的所有抽象方法,即参数列表必须一样,不能仅重载而 不覆盖,并且类中的成员方法必须声明为public。,即使该类不需要某方法,也必须覆盖接口中的抽象方法, 可以用一个空方法或返回默认值的方法覆盖。,10,4.1.1 接口与实现接口的类,4. 接口的特点,例如 : public double perimeter() /覆盖接口中的

5、抽象方法,返回默认值 return(); public void print() /覆盖接口中的抽象方法为空方法 ,一个实现接口的抽象类,可以覆盖接口中的部分抽象方法。,11,4.1.1 接口与实现接口的类,4. 接口的特点,(4) 接口中的成员变量都是常量,接口中成员变量的默认修饰符为public static final, 接口中不能声明实例成员变量,声明时,必须为常量赋值。 在实现接口的类中,不能为接口中的成员变量赋值。,例如: public interface Direction /方向接口 public static final int LEFT=0; /声明2个方向的常量 publ

6、ic static final int RIGHT=1; ,12,4.1.1 接口与实现接口的类,4. 接口的特点,(6) 接口是引用数据类型,(5) 接口不能被实例化,接口是引用数据类型,可以声明接口的变量。 接口变量能够获得实现接口的类的对象,也称为接口对象。 接口变量不能调用接口中没有声明的方法。,Java中不能创建接口的实例。 由于构造方法不能是抽象的,接口中不包含构造方法。,13,4.1.1 接口与实现接口的类,例如: class PlaneGraphics2_ex public static void main(String args) PlaneGraphics2_g1=new

7、Rectangle2(10,20); /长方形 g1.print(); /运行时多态性 g1 = new Ellipse2(10,20); /椭圆 g1.print(); ,14,4.1.2 用接口实现多重继承,1. 一个类可以继承一个父类并实现多个接口,图4.2 继承机制,一个类在声明继承一个直接父类的同时,还可以声明 实现多个接口,则实现了多重继承。,15,4.1.2 用接口实现多重继承,【例4.2】长方体类继承长方形类并实现一个接口的问题。, 设计立体图形接口SolidGraphics2。,设计长方体类Cuboid1,继承长方形类并实现立体图形接口。, 长方体类Cuboid1中必须再次覆

8、盖area()和print()方法。, 计算周长方法存在问题。,16,图4.3 长方体类的多重继承,17,4.1.2 用接口实现多重继承,【例4.3】球类实现多个接口。,图4.4 球类的多重继承,18,4.1.2 用接口实现多重继承,2. 接口的继承,一个接口允许被声明为继承一个已存在的父接口。,接口的继承性仍是单重继承,即一个接口只能有一 个父接口。,例如: public interface SolidGraphics2 extends PlaneGraphics2 /立体图形接口继承平面图形接口 public abstract double volume; /计算体积 / 继承了父接口的两

9、个抽象方法area()和print(),19,4.1.2 用接口实现多重继承,图4.5 接口的继承,20,4.1.2 用接口实现多重继承,3. 接口与抽象类的区别,相同点: 两者都包含抽象方法,约定多个类共用方法的参数列表 和返回值。 两者都不能被实例化。 两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。,不同点: 抽象类约定多个子类之间共同使用的方法; 接口约定多个互不相关类之间共同使用的方法。 抽象类与子类之间采用单重继承机制; 一个类实现多个接口则实现了多重继承的功能。,21,4.1.2 用接口实现多重继承,3. 接口与抽象类的区别,不同点: 抽象类及其类中成员具有与普通类

10、一样的访问权限; 接口的访问权限有public和缺省两种,接口中成员的访问权限均是public。 抽象类中可以包含非抽象方法,也可以声明构造方法; 接口中的方法全部是抽象方法,不能声明构造方法。 抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。,22,4.1.2 用接口实现多重继承,4. Java用接口实现多重继承比C+多重继承的优越之处,在单重继承机制下,通过子类对象调用父类的方法,Java将 在父类及若干祖先类中寻找指定方法,寻找的路径首先是父 亲,再沿着继承关系依次向上,一旦找到指定方法则执行该 方法,这条寻找路径是线性结构。,在C+的多重继承机制下,通过子类对象

11、调用父类的方法, 必须在多个父类构成的非线性结构(图结构)中寻找待执行 方法,因此查找范围大,运行效率低。,23,4.1.2 用接口实现多重继承,图4.6 Java单重继承时执行父类或祖先类中的方法,24,4.2 内部类,1. 声明内部类,2. 内部类特性,25,4.3 包,4.3.1 包的概念 4.3.2 创建、声明和导入包,26,4.3.1 包的概念,1. 问题的提出,为解决字节码文件存放和类命名的问题,27,4.3.1 包的概念,2. 什么是包,从逻辑概念看,包(package)是类的集合,一个包中包含多个类;,从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字

12、节码文件;,注:包与类的关系,就像文件夹与文件的关系一样。包中还可 以再有子包,称为包等级,子包对应一个子文件夹。,C. 包是Java提供的一种区别类名字空间的机制,一个包中的 多个类之间不能重名,不同包中的类名则可以相同。,28,4.3.2 创建、声明和导入包,1. 创建与包同名的文件夹,2. 声明类所在的包,set classpath=.;C:Program FilesJavajdk1.5.0lib;C:myjava,package 包1.包2;,注意: A. 在源程序文件中,package语句只能写一次,且必须写 在程序的第一行,即写在类声明之前。,B. 包名与对应文件夹名的大小写应一致

13、。,C. 多个类可以属于同一个包。,29,4.3.2 创建、声明和导入包,2. 声明类所在的包,例如 package mypackage; /声明所在的包 public interface PlaneGraphics2 public abstract double area(); ,30,4.3.2 创建、声明和导入包,3. 引用包中的类,包1.包2.类|接口,带包名的类或接口的全名格式如右:,例如: public class Rectangle2 implements mypackage.PlaneGraphics2,Java虚拟机以classpath设置的路径作为根,按照包等级 的指引,在

14、对应的文件夹和子文件夹中寻找指定类或接口的 .class文件。,31,4.3.2 创建、声明和导入包,4. 导入包,import 包1.包2.类|接口|*;,如果需要使用一个包中的许多类或接口,也可以使用import语句 声明,格式如下:,例如: import mypackage.PlaneGraphics2; public interface SolidGraphics2 extends PlaneGraphics2,表示包中的所有类或接口,注意:import语句必须写在其他类的声明之前。,package mypackage; Import mypackage.*; public inter

15、face SolidGraphics2 extends PlaneGraphics2,32,4.3.2 创建、声明和导入包,5. 默认包路径,当源程序中没有使用package声明类所在的包时,Java默认 包的路径是当前文件夹,没有包名。,引用同一包中的其它类时,包名可以省略,import语句也 可以省略。,6. 包之间类及类中成员的访问权限,包中非内部的类或接口只有2种访问权限:public和缺省。 public权限的类或接口,能够被所有包中的类引用,与该 类所在的包无关。 缺省权限的类或接口,被引用范围仅限于该类所在的包。,33,4.3.2 创建、声明和导入包,6. 包之间类及类中成员的访

16、问权限,在类中成员的4种访问权限中,public和private权限与包无 关,而protected和缺省权限与包有关。 public权限的类中成员,能够被所有包中的类引用,与该类 所在的包无关。 private权限的类中成员,只能被当前的类引用,也与该类所 在的包无关。 缺省权限的类中成员,被引用范围仅限于该类所在的包。 protected权限的类中成员,被引用范围是该类所在的包以及 其他包中的所有子类。,34,4.3.2 创建、声明和导入包,7. Java源程序结构,package /声明包,0-1句 import /导入包,0-多句 public class 或interface /声明

17、公有类或接口,0-1句, 文件名与该名相同 class /声明默认类,0-多句 interface /声明接口,0-多句,一个*.java的源程序文件可以包括以下几部分:,注意:声明为public的类或接口只能有一个, 且文件名必须与该类名相同。,35,4.3.2 创建、声明和导入包,8. 包可以压缩成文件,JDK提供的文件压缩命令是: jar.exe,Java压缩文件(*.jar ),36,4.4 Java API基础,4.4.1 Java提供的包概述 4.4.2 java.lang语言包 4.4.3 java.util实用包,应用程序接口(Application Programming I

18、nterface): 预定义许多通用的常量、函数、类、接口等功能,37,4.4.1 Java提供的包概述,1. Java的常用包,38,4.4.1 Java提供的包概述,2. 查看Java包中的类,3. 查看Java的源程序及包等级,核心API所有类的源文件(*.java): C:Program FilesJavajdk 1.5.0src.zip,Java的类文件(*.class): C:Program FilesJavajdk 1.5.0jrelibrt.jar,39,4.4.1 Java提供的包概述,4. 导入Java的包,java.lang语言包是Java自动导入的,如果要使用其他 包中

19、的类,必须用import语句导入。,例如: import java.util.Date; import java.awt.*; import java.applet.Applet;,40,4.4.2 java. lang语言包,41,4.4.2 java. lang语言包,1. Object类,Object是Java中所有类的父类或祖先类,定义了一个 Java对象所需要的基本操作和属性。,Object类的主要方法说明如下:,(1) getClass()方法调用该方法能够在运行时知道当前对象所 在的类是什么,返回值类型是Class类。,(2) equals()方法比较两个对象是否相等,该方法比较

20、的是两 个对象的引用是否相等,即这两个对象是否指向同一个实例。,42,4.4.2 java. lang语言包,图4.13 Object类中equals()方法,43,4.4.2 java. lang语言包,(3)toString()方法将当前对象的一些信息用字符串进行描述, 返回对象名和哈希码的十六进制表示。 子类通常也需要覆盖该方法,以显示指定类的信息。,(4)finalize()方法析构方法,释放对象并定义回收对象时所需 要完成的清理工作。,1. Object类,44,4.4.2 java. lang语言包,2. Math数学类,提供E、PI常量和一组数学函数。 Math是最终类,不能被继

21、承; 所有的变量和方法都是静态的,可以直接通过类名引用; Math类的构造方法是private,不能声明Math类的对象。,3. Comparable接口,声明一个用于对象比较的抽象方法compareTo()。,45,4.4.2 java. lang语言包,4. 基本数据类型的包装类,Java为每种基本数据类型都声明有对应的一个类。 基本数据类型的包装类(wrapper class)共有8个: Byte Short Integer Long Float Double Character Boolean,数值类Byte Double Float Integer Long Short 拥有共同的父

22、 类Number,Number类中定义了获得数值的基本操作,是 抽象类。,46,4.4.2 java. lang语言包,5. String字符串类,Java的字符串类有两个:String和StringBuffer。,String类对象引用的是常量字符串实例,对String类对象的任 何操作都将返回一个新创建的String类对象,这种字符串处理 方式具有线程访问安全特性。,StringBuffer类中字符串对象的值和长度都可以变化。,47,4.4.2 java. lang语言包,equals()和compareTo()比较两个字符串的方法。 区别如下:,equals()方法比较两个字符串是否相等

23、,返回boolean值。,compareTo()方法比较两个字符串的大小,返回两者之间 的差值(int),分以下3种情况:,若两个字符串st1、st2相等, pareTo(st2)返回0。 若两个字符串st1、st2不等,从头开始依次将两字符串中的每个 字符进行比较,当遇到第1个不同字符时, pareTo(st2) 返回这两个不同字符的差值。 若两个字符串st1、st2仅长度不等,则pareTo(st2)返回两 者长度的差值。,48,4.4.2 java. lang语言包,【例4.5】 设计一个已排序的对象数组类, 实现查找算法。, 数组元素的通用性设计。, 使用Integer对象的必要性。,

24、 使用泛型类与否的差别。,演示使用Comparable接口及实现该接口的类, 演示数据类型包装类和泛型类的必要性。,上机思考题,49,4.4.2 java. lang语言包,6. Class类操作类为类提供运行时信息,如名字、类型 以及父类等。,7. System系统类提供访问系统资源和标准输入/输出流 的方法。,8. Runtime运行时类可直接访问运行时资源。,System是最终类, 声明了3个标准输入/输出常量:in、out和err , 其方法都是静态的, 其构造方法是私有的,不能声明该类的对象。,50,4.4.2 java. lang语言包,【例4.6】 获得运行时信息。,上机思考题,

25、演示使用Integer类的静态方法将十进制转化为 二进制、十六进制字符串输出,使用Class、 Runtime类中的方法获得运行时信息。,51,4.4.3 java. util实用包,1. 日期类,java. util实用包提供了实现各种不同实用功能的类。,(1)Date日期类,public class Date extends Object implements java.io.Serializable, Cloneable, Comparable public Date() /构造方法,获得系统当前日期和时间的Date对象 this(System.currentTimeMillis();

26、public Date (long date) /构造方法,以长整型值创建Date对象 public void setTime (long time) /设置时间对应的长整型值 public long getTime() /返回对象中的时间值 public boolean before(Date when) /判断是否在指定日期之前 public boolean after(Date when) /判断是否在指定日期之后 public int compareTo(Date anotherDate) /比较两个日期 ,52,4.4.3 java. util实用包,(2)Calendar日期类,p

27、ublic abstract class Calendar extends Object implements Serializable, Cloneable, Comparable public static final int YEAR /年,常量 public static final int MONTH /月 public static final int DATE /日 public static final int HOUR /时 public static final int MINUTE /分 public static final int SECOND /秒 public s

28、tatic final int MILLISECOND /百分秒 public static final int DAY_OF_WEEK /星期 ,53,4.4.3 java. util实用包,(2)Calendar日期类,public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable public static Calendar getInstance () /创建实例 public int get (int field) /返回日期 public final Date

29、getTime () /返回对象中的日期和时间 public final void setTime (Date date) /设置对象的日期和时间 public final void set (int year, int month, int date) public final void set (int year, int month, int date, int hour, int minute) ,例如 Calendar now = Calendar. getInstance(); /获得实例 int year =now. get(Calendar. YEAR); /获得对象中的年份值

30、,54,4.4.3 java. util实用包,【例4.7】 获得系统当前日期和时间,并按指定格式输出。,演示获得系统当前日期和时间的3种方法: new Date()、System.currentTimeMillis()、 Calendar.getInstance()方法。,55,4.4.3 java. util实用包,2. 集合API (Collection API) 一组集合相关的类库定义及实现.,集合API 中最基本的接口是Collection(无序集合) 定义了聚集形式数据的基本操作方法,如增加一个元 素、删除一个元素、清除所有元素等。,表示数据结构的类有:LinkedList(链表)、Vector(向量)、 Stack(栈)、Hashtable(散列表)、TreeSet(树)等。,Collection有两个子接口:Set(不重复集合) 和List(有序不重复集合).,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1