1、2022-8-121第第4章章 接口、内部类和接口、内部类和Java API 基础基础4.1 接口接口4.2 内部类和内部接口内部类和内部接口4.3 java.lang包中的基础类库包中的基础类库4.4 java.util包中的工具类库包中的工具类库1.3.3 包包2022-8-1224.1 接口接口4.1.1 接口与实现接口的类接口与实现接口的类4.1.2 用接口实现多继承用接口实现多继承 接口提供方法声明与方法实现相分离的机制,使多接口提供方法声明与方法实现相分离的机制,使多个类之间表现出共同的行为能力。接口机制使个类之间表现出共同的行为能力。接口机制使JavaJava具有具有实现多重继承
2、的能力。实现多重继承的能力。2022-8-1234.1.1 接口与实现接口的类接口与实现接口的类1.声明接口声明接口public interface 接口接口 extends 父接口父接口 public static final 数据类型数据类型 成员变量成员变量=常量值常量值;public abstract 返回值类型返回值类型 成员方法成员方法(参数列表参数列表);在在Java中,中,接口是一种接口是一种引用数据类型引用数据类型,是一组常量,是一组常量和抽象方法的集合。和抽象方法的集合。例如例如:public interface Area /可计算面积接口可计算面积接口 public ab
3、stract double area();/计算面积计算面积2022-8-1242.声明实现接口的类声明实现接口的类格式:格式:修饰符修饰符 class 类类 extends 父类父类implements 接口列表接口列表例如:例如:public class Rectangle implements Area4.1.1 接口与实现接口的类(续)接口与实现接口的类(续)【例例4.1】可计算面积接口与实现该接口的矩形类。可计算面积接口与实现该接口的矩形类。2022-8-1253.接口是一种引用数据类型接口是一种引用数据类型Area g=new Rectangle(10,20);/接口变量接口变量g
4、引用实现接口的类的对象引用实现接口的类的对象System.out.println(g.toString();/执行执行Rectangle的方法的方法g=new Ellipse(10,20);/g引用椭圆对象引用椭圆对象System.out.println(g.toString();/执行执行Ellipse的方法的方法4.1.1 接口与实现接口的类(续)接口与实现接口的类(续)【例例4.2】可计算体积接口与实现该接口的长方体类。可计算体积接口与实现该接口的长方体类。2022-8-126【例例4.3】球类实现多个接口。球类实现多个接口。4.1.1 接口与实现接口的类(续)接口与实现接口的类(续)2
5、022-8-127n接口及接口中成员的访问权限都是接口及接口中成员的访问权限都是public。n接口中的成员方法都是公有的、抽象的实例成员方法。接口中的成员方法都是公有的、抽象的实例成员方法。public abstractn接口中的所有抽象方法必须全部被实现接口的类覆盖。接口中的所有抽象方法必须全部被实现接口的类覆盖。n接口中的接口中的成员变量都是常量成员变量都是常量。public static finaln接口不能被实例化。接口不能被实例化。n接口是引用数据类型,可以声明接口的变量。接口是引用数据类型,可以声明接口的变量。Area g=new Rectangle(10,20);4.接口的特点
6、接口的特点4.1.1 接口与实现接口的类(续接口与实现接口的类(续)2022-8-1284.1.2 用接口实现多继承用接口实现多继承1.一个类可以继承一个父类并实现多个接口一个类可以继承一个父类并实现多个接口父 类继 承子 类 2子 类 1继 承(1)单 重 继 承(2)多 重 继 承父 类继 承子 类接 口 1实 现接 口 1实 现类接 口 2实 现(a)继 承 并 实 现 接 口(b)实 现 多 个 接 口接 口 2实 现public interface AreaVolumn extends Area,Volumepublic class Globe implements AreaVolu
7、me2022-8-129n相同点:相同点:n两者都包含抽象方法。两者都包含抽象方法。n两者都不能被实例化。两者都不能被实例化。n两者都是引用数据类型。两者都是引用数据类型。n不同点:不同点:n抽象类约定抽象类约定多个子类之间多个子类之间共同使用的方法;接口约定共同使用的方法;接口约定多个互多个互不相关类不相关类之间共同使用的方法。之间共同使用的方法。n抽象类与子类之间采用单重继承机制;一个类实现多个接口抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能。则实现了多重继承的功能。n抽象类及其类中成员具有与普通类一样的访问权限;接口的抽象类及其类中成员具有与普通类一样的访问
8、权限;接口的访问权限有访问权限有public和默认两种,接口中成员的访问权限均是和默认两种,接口中成员的访问权限均是public。n抽象类中可以包含非抽象方法,也可以声明构造方法;接口抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全部是抽象方法,不能声明构造方法。中的方法全部是抽象方法,不能声明构造方法。n抽象类中可以声明成员变量,子类可以对该成员变量赋值;抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。接口中只能声明常量。2.接口与抽象类的比较接口与抽象类的比较4.1.2 用接口实现多继承(续)用接口实现多继承(续)2022-8-12104.2 内部类和
9、内部接口内部类和内部接口 类与类之间除了继承关系,还存在嵌套关系,即一个类与类之间除了继承关系,还存在嵌套关系,即一个类可以声明包含另一个类,被包含的类称为内部类(内嵌类可以声明包含另一个类,被包含的类称为内部类(内嵌类型),包含内部类的类称为外部类(外层类型)。内嵌类型),包含内部类的类称为外部类(外层类型)。内嵌类型既有类型的特性,也有类中成员的特性。类型既有类型的特性,也有类中成员的特性。public class Line /直线类,外层类型直线类,外层类型 class Point /点类,内嵌类型点类,内嵌类型1作为类型的特性作为类型的特性n内嵌类型不能与外层类型同名。内嵌类型不能与外
10、层类型同名。n内部类中可以声明成员变量和成员方法。内部类中可以声明成员变量和成员方法。n内部类可以继承父类或实现接口。内部类可以继承父类或实现接口。n内部类可以声明为抽象类或内部接口。内部类可以声明为抽象类或内部接口。2022-8-1211n使用点运算符使用点运算符“.”引用内嵌类型:引用内嵌类型:n外层类型外层类型.内嵌类型内嵌类型 Line.Pointn彼此信任,能访问对方的所有成员。彼此信任,能访问对方的所有成员。n具有类中成员的具有类中成员的4种访问控制权限。种访问控制权限。n内部接口总是静态的。内部接口总是静态的。2作为成员的特性作为成员的特性4.2 内部类和内部接口(续)内部类和内
11、部接口(续)【例例4.4】直线类声明内嵌的点类和方向接口。直线类声明内嵌的点类和方向接口。2022-8-12121.3.3 包包1问题的提出问题的提出2什么是包什么是包n从逻辑概念看,包(从逻辑概念看,包(package)是类的集合,一)是类的集合,一个包中包含多个类;个包中包含多个类;n从存储概念看,包是类的组织方式,一个包对应一从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;个文件夹,一个文件夹中包含多个字节码文件;n包与类的关系,就像文件夹与文件的关系一样。包包与类的关系,就像文件夹与文件的关系一样。包中还可以再有子包,称为包等级,子包对应一个子中还
12、可以再有子包,称为包等级,子包对应一个子文件夹。文件夹。n为解决字节码文件存放和类命名的问题,为解决字节码文件存放和类命名的问题,Java提提供了包机制。供了包机制。2022-8-12131.3.1 包(续)包(续)n创建与包同名的文件夹创建与包同名的文件夹 F:myjavamypackagen声明类所在的包声明类所在的包 package 包包1.包包2;例如:例如:package mypackage;/声明所在的包声明所在的包n引用包中的类引用包中的类 包包1.包包2.类类|接口接口n导入包导入包 import 包包1.包包2.类类|接口接口|*;例如:例如:import mypackage
13、.Line;import java.awt.*;n默认包路径:当前文件夹默认包路径:当前文件夹 3创建、声明和导入包创建、声明和导入包【例例1.4】创建及使用包。创建及使用包。2022-8-12141.3.1 包(续)包(续)Java源程序结构源程序结构package/声明包,声明包,01句句import/导入包,导入包,0多句多句public class 或或interface/声明公有类或接口,声明公有类或接口,01 句,文件名与该名相同句,文件名与该名相同class/声明默认类,声明默认类,0多句多句interface/声明接口,声明接口,0多句多句2022-8-1215nJavaJav
14、a的常用包的常用包n查看查看JavaJava包中的类包中的类n查看查看JavaJava的源程序及包等级的源程序及包等级n导入导入JavaJava的包的包java.lang 语言包语言包java.util 实用包实用包java.awt 抽象窗口工具包抽象窗口工具包java.appletjava.io 输入输出流包输入输出流包 网络包网络包java.sql 数据库应用数据库应用javax.swing 图形用户界面图形用户界面import java.util.Date;import java.awt.*;解压解压JDKJDK帮助文档帮助文档jdk-?-doc.zipjdk-?-doc.zip解压解压
15、src.zipsrc.zip1.3.1 包(续)包(续)Java API基础基础2022-8-1216nObject类类nMath数学类数学类nComparable接口接口n基本数据类型包装类基本数据类型包装类nString字符串类字符串类nClass类操作类类操作类nSystem系统类系统类nRuntime运行时类运行时类Guess.java4.3 java.lang包中的基础类库包中的基础类库2022-8-1217【补充例补充例】计算程序执行的时间计算程序执行的时间/Elapsed.javapublic class Elapsed public static void main(Strin
16、g args)long start,end,sum=0;System.out.println(a loop from 0 to 1,000,000,000);start=for(int i=0;i 1000000000;i+)sum=sum+i*i;end=System.out.println(Elapsed time:+(end-start);2022-8-1218【补充例补充例】执行执行Java外部程序外部程序/ExecDemo.javapublic class ExecDemo public static void main(String args)Runtime r=Runtime.g
17、etRuntime();Process p=null;try p=(notepad);/程序暂停1秒钟 );/关闭外部程序 ();/改为p.waitFor()catch(Exception e)System.out.println(Error executing notepad.);2022-8-12194.4 java.util包中的工具类库包中的工具类库4.4.1 日期类日期类4.4.2 Arrays数组类数组类4.4.3 Random随机数序列类随机数序列类 2022-8-12204.4.1 日期类日期类1Date日期类日期类2Calendar类类【例例4.5】月历。月历。【补充例补充例
18、】获得系统当前日期和时间,并按指定格式输出。获得系统当前日期和时间,并按指定格式输出。【补充例补充例】CalculateDay.java2022-8-12214.4.2 Arrays数组类数组类1.比较两个数组是否相等比较两个数组是否相等public static boolean equals(int a,int b)public static boolean equals(Object a,Object b)2.填充填充public static void fill(int a,int val)3.排序排序public static void sort(Object a)public sta
19、tic void sort(T a,Comparator c)4.二分法(折半)查找二分法(折半)查找public static int binarySearch(Object a,Object key)public static int binarySearch(T a,T key,Comparator c)【例例4.6】对象数组的排序和查找。对象数组的排序和查找。2022-8-12224.4.3 Random随机数序列类随机数序列类 public class Random extends Object implements java.io.Serializable public Random()/创建一个随机数序列创建一个随机数序列 public Random(long seed)/seed指定随机数序列种子指定随机数序列种子 public int nextInt()/返回下一个随机数返回下一个随机数 public int nextInt(int n)/返回下一个随机数(返回下一个随机数(n以内)以内)public double nextDouble()书面作业:实验书面作业:实验4.14.1、4.24.22022-8-1223谢谢!