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

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

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

1、Java2程序设计实用教程(第2版),第4章 接口、内部类和包,4.1 接口 4.2 内部类 4.3 包 4.4 Java API基础,4.1 接口,4.1.1 接口与实现接口的类 4.1.2 用接口实现多重继承,4.1.1 接口与实现接口的类,声明接口 public interface 接口 extends 父接口 public static final 数据类型 成员变量=常量值; public abstract 返回值类型 成员方法(参数列表); 例如, public interface Plane1 /平面图形接口 public abstract double area(); /计算面

2、积 ,2. 声明实现接口的类,修饰符 class 类 extends 父类 implements 接口列表 例如, public class Rectangle2 implements PlaneGraphics2,3. 接口的作用,接口 与类相似是Java的一种高级编程机制 是一组常量定义和抽象方法定义的集合 作用 利用接口,在Java中可实现多重继承 利用接口可以实现不相关类的相同行为,而不考虑这些类之间的层次关系 通过接口可以指明多个类需要实现的方法,了解对象的交互性界面,而不必了解对象所对应的类,4. 理解接口,接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继

3、承关系. 同一个类也可以实现多个接口。接口只关心功能,并不关心功能的具体实现.,5. 接口回调,接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法 . 类似于子类对象赋给父类变量,调用的实际是子类的方法。,图4.1 图形接口与实现图形接口的类,【例4.1】 图形接口与实现图形接口的类。,设计平面图形接口PlaneGraphics2。 设计长方形类Rectangle2,实现平面图形接口。,6. 接口的特点,接口及接口中成员的访问权限都是pu

4、blic 接口中的成员方法都是公有的、抽象的实例成员方法 接口中的所有抽象方法必须全部被实现接口的类覆盖 接口中的成员变量都是常量 接口不能被实例化 接口是引用数据类型 PlaneGraphics2 g1 = new Rectangle2(10,20);,4.1.2 用接口实现多重继承,一个类可以继承一个父类并实现多个接口 图4.2 继承机制,【例4.2】 长方体类继承长方形类并实现立体图形接口。,设计立体图形接口SolidGraphics2。 设计长方体类Cuboid1,继承长方形类并实现立体图形接口。 长方体类Cuboid1中必须再次覆盖area()和print()方法。 计算周长方法存在

5、问题。,图4.3 长方体类的多重继承,【例4.3】 球类实现多个接口。,图4.4 球类的多重继承,7. 接口的继承,图4.5 接口的继承,8. 接口与抽象类的区别,相同点: 两者都包含抽象方法。 两者都不能被实例化。 两者都是引用数据类型。 不同点: 抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。 抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能。 抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限有public和默认两种,接口中成员的访问权限均是public。 抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全

6、部是抽象方法,不能声明构造方法。 抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。,4. Java用接口实现多重继承比C+多重继承的优越之处,图4.6 Java单重继承时执行父类或祖先类中的方法,4.2 内部类,声明内部类 public class Line /直线类,外部类 protected Point p1,p2; /直线的起点和终点 protected class Point /点类,内部类 protected int x,y; /内部类的成员变量 protected Point(int x,int y) /内部类的构造方法 this.x = x; this.y

7、 = y; ,2. 内部类特性,内部类的类特性 内部类不能与外部类同名。 内部类具有封装性。 内部类具有继承性。 内部类具有抽象性。 内部类的成员特性 使用点运算符“.”引用内部类。例如: Line.Point 内部类具有4种类中成员的访问权限。 内部类具有静态特性。,【例4.4】 设计点类作为直线类的内部类。,设计一个接口Direction,其中约定表示左、右、上、下4个方向的4个常量。 设计点类作为直线类的内部类,点类实现方向接口。 声明和使用接口中常量 声明和调用内部类的成员方法 内部类Point编译生成字节码的文件名为Line$Point.class。,图4.7 以(100,100)为

8、起点的4个方向的4条直线,4.3 包,4.3.1 包的概念 4.3.2 创建、声明和导入包,4.3.1 包的概念,问题的提出 什么是包 从逻辑概念看,包(package)是类的集合,一个包中包含多个类; 从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件; 包与类的关系,就像文件夹与文件的关系一样。包中还可以再有子包,称为包等级,子包对应一个子文件夹。,4.3.2 创建、声明和导入包,创建与包同名的文件夹 set classpath=.;C:Program FilesJavajdk1.5.0lib;C:myjava 声明类所在的包 package 包1.包2;

9、 例如, package mypackage; /声明所在的包 public interface PlaneGraphics2 引用包中的类 包1.包2.类|接口,4.3.2 创建、声明和导入包,导入包 import 包1.包2.类|接口|*; import mypackage.PlaneGraphics2; 默认包路径:当前文件夹 包之间类及类中成员的访问权限 包中非内部的类或接口只有2种访问权限:public和缺省。 在类中成员的4种访问权限中,public和private权限与包无关,而protected和缺省权限与包有关。,4.3.2 创建、声明和导入包,Java源程序结构 packa

10、ge /声明包,01句 import /导入包,0多句 public class 或interface /声明公有类或接口,01句,文件名与该名相同 class /声明默认类,0多句 interface /声明接口,0多句 包可以压缩成文件 jar.exe,4.4 Java API基础,4.4.1 Java提供的包概述 4.4.2 java.lang语言包 4.4.3 java.util实用包,4.4.1 Java提供的包概述,Java的常用包 java.lang 语言包 java.util 实用包 java.awt 抽象窗口工具包 java.applet java.io 输入输出流包 网络

11、包 java.sql javax.swing 查看Java包中的类 查看Java的源程序及包等级 导入Java的包 import java.util.Date;,4.4.2 java.lang语言包,Object类 package java.lang; public class Object public Object() /构造方法 public final native Class getClass(); /返回当前对象所在的类 public boolean equals(Object obj) /比较当前对象与obj是否相等 public String toString() /返回当前对

12、象的信息字符串 protected void finalize() throws Throwable /析构方法 ,图4.13 Object类中equals()方法,2. Math数学类,public final class Math extends Object private Math() public static final double E = 2.7182818284590452354; /常量 public static final double PI = 3.14159265358979323846; public static double abs(double a) /求绝

13、对值 public static double max(double a,double b) /最大值 public static double min(double a,double b) /最小值 public static double random() /返回一个0.01.0之间的随机数 ,3. Comparable接口,public interface Comparable int compareTo(T o) /比较对象 其中,是Comparable接口的参数,表示一个类。,4. 基本数据类型的包装类,8个Byte、Short、Integer、Long、Float、Double、C

14、haracter、Boolean。 public final class Integer extends Number implements Comparable public static final int MIN_VALUE = 0x80000000;/最小值常量,-231 public static final int MAX_VALUE = 0x7fffffff; /最大值常量,231-1 public Integer(int value) /构造方法 public Integer(String s) throws NumberFormatException public stati

15、c int parseInt(String s) throws NumberFormatException /将字符串转换为整数,静态方法 public boolean equals(Object obj) /覆盖Object类中方法 public String toString() /覆盖Object类中方法 public int compareTo(Integer anotherInteger) /比较两个对象的大小,返回两者之间的差值,实现Comparable接口中方法 ,Double和Float类,Double类和Float类实现了对double和float基本型数据的类包装。 可以使

16、用Double类的构造方法: Double (double num) 创建一个Double类型的对象; 使用Float类的构造方法: Float (float num) 创建一个Float类型的对象。 Double对象调用doubleValue()方法可以返回该对象含有的double型数据; Float对象调用floatValue()方法可以返回该对象含有的float型数据。,2. Byte, Integer,Short,Long类,下述构造方法分别可以创建Byte、Integer、Short和Long类型的对象: Byte(byte num) Integer(int num) Short(s

17、hort num) Long(long num) Byte、Integer、Short和Long对象分别调用byteValue ()、intValue()、shortValue ()和longValue ()方法可以返回该对象含有的基本型数据。,Character类,Character类实现了对char基本型数据的类包装。 可以使用Character类的构造方法: Character (char c) 创建一个Character类型的对象。 Character对象调用charValue()方法可以返回该对象含有的char型数据。,5. String字符串类,public final class

18、 String extends Object implements java.io.Serializable, Comparable, CharSequence public String() /构造方法 public String(String original) public String toString() /覆盖Object类中方法 public int length() /返回字符串的长度 public boolean equals(Object obj) /比较字符串是否相等,覆盖Object类中方法 public boolean equalsIgnoreCase (String

19、 s) /比较字符串是否相等,忽略字母大小写 public int compareTo(String anotherString) /比较字符串的大小,实现Comparable接口方法 public int compareToIgnoreCase(String str) /比较字符串的大小,忽略字母大小写 ,【例4.5】 设计一个已排序的对象数组类,实现查找算法。,数组元素的通用性设计 private Object table; private Comparable table; /存放实现Comparable接口对象 使用Integer对象的必要性 使用泛型类与否的差别 public int

20、 compareTo(Integer anotherInteger) /Integer类 public int compareTo(String anotherString) /String类 SortedArray sa1 = new SortedArray(10);,6. Class类操作类,public final class Class private Class() /构造方法 public String getName() /返回当前类名字符串 public Class getSuperclass(); /返回当前类的父类 public Package getPackage() /

21、返回当前类所在的包 System.out.print(this.getClass().getName()+“ “);,Class类的说明,Class是java.lang包中的类,该类的实例用来封装对象运行时的状态。当一个类被加载且创建对象时,和该类相关的一个类型为Calss的对象就会自动创建。Class类本身不提供构造方法,因此,不能使用new运算符和构造方法显示地创建一个Class对象。任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取创建对象的类的有关信息.,使用Class实例化一个对象,创建对象最常用的方式就是使用ne

22、w运算符和类的构造方法,实际上我们也可以使用Class对象得到一个类的实例。为了得到一个类的对象,可以先得到一个和该类相关的Class对象,做到这一点并不困难,只要使用Class的类方法 public static Class forName(String className) throws ClassNotFoundException 就可以返回一个和参数className指定的类相关的Class对象。再让这个Class对象调用 public Object newInstance() throws InstantiationException,IllegalAccessException 方

23、法就可以得到一个className类的对象。,7. System系统类,public final class System extends Object private System() public final static InputStream in = nullInputStream(); public final static PrintStream out = nullPrintStream(); public final static PrintStream err = nullPrintStream(); public static native viod arraycopy(

24、Object src, int src_pos, Object dst, int dst_pos, int length) /复制数组 public static void exit(int status) /结束当前运行的程序 public static native long currentTimeMillis(); /获得当前日期和时间,返回从1970-1-1 00:00:00开始至当前时间的累计毫秒数 public static Properties getProperties() /获得系统全部属性 public static String getProperty(String ke

25、y) /获得指定系统属性 ,8. Runtime运行时类,public class Runtime extends Object private Runtime() /构造方法 public static Runtime getRuntime() /返回与当前应用程序相联系的运行时环境 public long totalMemory() /返回系统内存空间总量 public long freeMemory() /返回系统内存剩余空间的大小 【例4.6】 获得运行时信息。,4.4.3 java.util实用包,日期类 Date日期类 public class Date extends Objec

26、t implements java.io.Serializable, Cloneable, 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) /判断是否在指定日期之前 publi

27、c boolean after(Date when) /判断是否在指定日期之后 public int compareTo(Date anotherDate) /比较两个日期 ,(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 /日 pub

28、lic static final int HOUR /时 public static final int MINUTE /分 public static final int SECOND /秒 public static final int MILLISECOND /百分秒 public static final int DAY_OF_WEEK /星期 ,(2) Calendar日期类,public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable public stati

29、c Calendar getInstance() /创建实例 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 year =now.get(Calendar.YEAR); /获得对象中的年份值 【例4.7】 获得系统当前日期和时间,并按指定格式输出。,2. 集合API,Collection有2个子接口:Set(不重复集合)和List(有序不重复集合)。 表示数据结构的类有:LinkedList(链表)、Vector(向量)、Stack(栈)、Hashtable(散列表)、TreeSet(树)等。,实验4 设计实现接口的类,设计圆柱体类和圆椎体类 将Person1类的成员变量改为出生日期,再设计age()方法求年龄。,

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

当前位置:首页 > 其他


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