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

上传人:sccc 文档编号:5642263 上传时间:2023-08-05 格式: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 数据类型 成员变量=常量值;public abstract

2、 返回值类型 成员方法(参数列表);,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.1.1 接口与实现接口的类,(1)接

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

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

6、.接口的特点,(6)接口是引用数据类型,(5)接口不能被实例化,接口是引用数据类型,可以声明接口的变量。接口变量能够获得实现接口的类的对象,也称为接口对象。接口变量不能调用接口中没有声明的方法。,Java中不能创建接口的实例。由于构造方法不能是抽象的,接口中不包含构造方法。,13,4.1.1 接口与实现接口的类,例如:class PlaneGraphics2_ex public static void main(String args)PlaneGraphics2_g1=new Rectangle2(10,20);/长方形 g1.print();/运行时多态性 g1=new Ellipse2(

7、10,20);/椭圆 g1.print();,14,4.1.2 用接口实现多重继承,1.一个类可以继承一个父类并实现多个接口,图4.2 继承机制,一个类在声明继承一个直接父类的同时,还可以声明实现多个接口,则实现了多重继承。,15,4.1.2 用接口实现多重继承,【例4.2】长方体类继承长方形类并实现一个接口的问题。,设计立体图形接口SolidGraphics2。,设计长方体类Cuboid1,继承长方形类并实现立体图形接口。,长方体类Cuboid1中必须再次覆盖area()和print()方法。,计算周长方法存在问题。,16,图4.3 长方体类的多重继承,17,4.1.2 用接口实现多重继承,

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

9、象类的区别,相同点:两者都包含抽象方法,约定多个类共用方法的参数列表 和返回值。两者都不能被实例化。两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。,不同点:抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能。,21,4.1.2 用接口实现多重继承,3.接口与抽象类的区别,不同点:抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限有public和缺省两种,接口中成员的访问权限均是public。抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全部是抽象方法,

10、不能声明构造方法。抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。,22,4.1.2 用接口实现多重继承,4.Java用接口实现多重继承比C+多重继承的优越之处,在单重继承机制下,通过子类对象调用父类的方法,Java将 在父类及若干祖先类中寻找指定方法,寻找的路径首先是父 亲,再沿着继承关系依次向上,一旦找到指定方法则执行该 方法,这条寻找路径是线性结构。,在C+的多重继承机制下,通过子类对象调用父类的方法,必须在多个父类构成的非线性结构(图结构)中寻找待执行 方法,因此查找范围大,运行效率低。,23,4.1.2 用接口实现多重继承,图4.6 Java单重继承时执行父类

11、或祖先类中的方法,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)是类的集合,一个包中包含多个类;,从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;,注:包与类的关系,就像文件夹与文件的关系一样。包中还可 以再有子包,称为包等级,子包对应一个子文件夹。,C.包是Java提供的一种区别类名字空间的机制,一个包中的 多个类之间不能重

12、名,不同包中的类名则可以相同。,28,4.3.2 创建、声明和导入包,1.创建与包同名的文件夹,2.声明类所在的包,set classpath=.;C:Program FilesJavajdk1.5.0lib;C:myjava,package 包1.包2;,注意:A.在源程序文件中,package语句只能写一次,且必须写 在程序的第一行,即写在类声明之前。,B.包名与对应文件夹名的大小写应一致。,C.多个类可以属于同一个包。,29,4.3.2 创建、声明和导入包,2.声明类所在的包,例如package mypackage;/声明所在的包public interface PlaneGraphic

13、s2 public abstract double area();,30,4.3.2 创建、声明和导入包,3.引用包中的类,包1.包2.类|接口,带包名的类或接口的全名格式如右:,例如:public class Rectangle2 implements mypackage.PlaneGraphics2,Java虚拟机以classpath设置的路径作为根,按照包等级的指引,在对应的文件夹和子文件夹中寻找指定类或接口的.class文件。,31,4.3.2 创建、声明和导入包,4.导入包,import 包1.包2.类|接口|*;,如果需要使用一个包中的许多类或接口,也可以使用import语句声明,

14、格式如下:,例如:import mypackage.PlaneGraphics2;public interface SolidGraphics2 extends PlaneGraphics2,表示包中的所有类或接口,注意:import语句必须写在其他类的声明之前。,package mypackage;Import mypackage.*;public interface SolidGraphics2 extends PlaneGraphics2,32,4.3.2 创建、声明和导入包,5.默认包路径,当源程序中没有使用package声明类所在的包时,Java默认 包的路径是当前文件夹,没有包名。

15、,引用同一包中的其它类时,包名可以省略,import语句也 可以省略。,6.包之间类及类中成员的访问权限,包中非内部的类或接口只有2种访问权限:public和缺省。public权限的类或接口,能够被所有包中的类引用,与该 类所在的包无关。缺省权限的类或接口,被引用范围仅限于该类所在的包。,33,4.3.2 创建、声明和导入包,6.包之间类及类中成员的访问权限,在类中成员的4种访问权限中,public和private权限与包无关,而protected和缺省权限与包有关。public权限的类中成员,能够被所有包中的类引用,与该类 所在的包无关。private权限的类中成员,只能被当前的类引用,也与

16、该类所 在的包无关。缺省权限的类中成员,被引用范围仅限于该类所在的包。protected权限的类中成员,被引用范围是该类所在的包以及 其他包中的所有子类。,34,4.3.2 创建、声明和导入包,7.Java源程序结构,package/声明包,0-1句import/导入包,0-多句public class 或interface/声明公有类或接口,0-1句,文件名与该名相同class/声明默认类,0-多句interface/声明接口,0-多句,一个*.java的源程序文件可以包括以下几部分:,注意:声明为public的类或接口只能有一个,且文件名必须与该类名相同。,35,4.3.2 创建、声明和导

17、入包,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 Interface):预定义许多通用的常量、函数、类、接口等功能,37,4.4.1 Java提供的包概述,1.Java的常用包,38,4.4.1 Java提供的包概述,2.查看Java包中的类,3.查看Java的源程序及包等级,核心API所有类的源文件(*.java):C:Program F

18、ilesJavajdk 1.5.0src.zip,Java的类文件(*.class):C:Program FilesJavajdk 1.5.0jrelibrt.jar,39,4.4.1 Java提供的包概述,4.导入Java的包,java.lang语言包是Java自动导入的,如果要使用其他包中的类,必须用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

19、中所有类的父类或祖先类,定义了一个Java对象所需要的基本操作和属性。,Object类的主要方法说明如下:,(1)getClass()方法调用该方法能够在运行时知道当前对象所 在的类是什么,返回值类型是Class类。,(2)equals()方法比较两个对象是否相等,该方法比较的是两 个对象的引用是否相等,即这两个对象是否指向同一个实例。,42,4.4.2 java.lang语言包,图4.13 Object类中equals()方法,43,4.4.2 java.lang语言包,(3)toString()方法将当前对象的一些信息用字符串进行描述,返回对象名和哈希码的十六进制表示。子类通常也需要覆盖该

20、方法,以显示指定类的信息。,(4)finalize()方法析构方法,释放对象并定义回收对象时所需 要完成的清理工作。,1.Object类,44,4.4.2 java.lang语言包,2.Math数学类,提供E、PI常量和一组数学函数。Math是最终类,不能被继承;所有的变量和方法都是静态的,可以直接通过类名引用;Math类的构造方法是private,不能声明Math类的对象。,3.Comparable接口,声明一个用于对象比较的抽象方法compareTo()。,45,4.4.2 java.lang语言包,4.基本数据类型的包装类,Java为每种基本数据类型都声明有对应的一个类。基本数据类型的包

21、装类(wrapper class)共有8个:Byte Short Integer Long Float Double Character Boolean,数值类Byte Double Float Integer Long Short 拥有共同的父 类Number,Number类中定义了获得数值的基本操作,是 抽象类。,46,4.4.2 java.lang语言包,5.String字符串类,Java的字符串类有两个:String和StringBuffer。,String类对象引用的是常量字符串实例,对String类对象的任何操作都将返回一个新创建的String类对象,这种字符串处理方式具有线程访问

22、安全特性。,StringBuffer类中字符串对象的值和长度都可以变化。,47,4.4.2 java.lang语言包,equals()和compareTo()比较两个字符串的方法。区别如下:,equals()方法比较两个字符串是否相等,返回boolean值。,compareTo()方法比较两个字符串的大小,返回两者之间 的差值(int),分以下3种情况:,若两个字符串st1、st2相等,pareTo(st2)返回0。若两个字符串st1、st2不等,从头开始依次将两字符串中的每个 字符进行比较,当遇到第1个不同字符时,pareTo(st2)返回这两个不同字符的差值。若两个字符串st1、st2仅长

23、度不等,则pareTo(st2)返回两 者长度的差值。,48,4.4.2 java.lang语言包,【例4.5】设计一个已排序的对象数组类,实现查找算法。,数组元素的通用性设计。,使用Integer对象的必要性。,使用泛型类与否的差别。,演示使用Comparable接口及实现该接口的类,演示数据类型包装类和泛型类的必要性。,上机思考题,49,4.4.2 java.lang语言包,6.Class类操作类为类提供运行时信息,如名字、类型 以及父类等。,7.System系统类提供访问系统资源和标准输入/输出流 的方法。,8.Runtime运行时类可直接访问运行时资源。,System是最终类,声明了3

24、个标准输入/输出常量:in、out和err,其方法都是静态的,其构造方法是私有的,不能声明该类的对象。,50,4.4.2 java.lang语言包,【例4.6】获得运行时信息。,上机思考题,演示使用Integer类的静态方法将十进制转化为 二进制、十六进制字符串输出,使用Class、Runtime类中的方法获得运行时信息。,51,4.4.3 java.util实用包,1.日期类,java.util实用包提供了实现各种不同实用功能的类。,(1)Date日期类,public class Date extends Object implements java.io.Serializable,Clon

25、eable,Comparable public Date()/构造方法,获得系统当前日期和时间的Date对象 this(System.currentTimeMillis();public Date(long date)/构造方法,以长整型值创建Date对象 public void setTime(long time)/设置时间对应的长整型值 public long getTime()/返回对象中的时间值 public boolean before(Date when)/判断是否在指定日期之前 public boolean after(Date when)/判断是否在指定日期之后 public

26、int compareTo(Date anotherDate)/比较两个日期,52,4.4.3 java.util实用包,(2)Calendar日期类,public 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/时 publi

27、c static final int MINUTE/分 public static final int SECOND/秒 public static 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 getInstan

28、ce()/创建实例 public int get(int field)/返回日期 public final Date 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 y

29、ear=now.get(Calendar.YEAR);/获得对象中的年份值,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备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号