《接口内部类和JavaAPI基础.ppt》由会员分享,可在线阅读,更多相关《接口内部类和JavaAPI基础.ppt(50页珍藏版)》请在三一办公上搜索。
1、Java程序设计实用教程(第4版),第4章 接口、内部类和Java API基础,4.1 接口与实现接口的类4.2 内部类和内部接口 4.3 Java API基础 4.4 泛型,Java程序设计实用教程(第4版),第4章 接口、内部类和Java API基础,内容和要求:理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口、一个类实现多个接口的声明和使用方法。理解内嵌类型的概念,理解声明内部类的方法。熟悉Java语言包和实用包中的常用类。重点:接口和实现接口的类;Java API。难点:接口,内部类,Java API。,为什么要引入接口标准的制定者和实现者分开实现多继承对一组具有共同行为的类
2、抽象:面向接口编程,接口的作用,接口提供方法声明与方法实现想分离的机制,使多个类之间表现出共同的行为能力;使得Java具有实现多继承的能力。,Java程序设计实用教程(第4版),Java程序设计实用教程(第4版),4.1 接口与实现接口的类,接口:是一组抽象方法、常量和内嵌类型的集合。是一种数据类型,采用抽象的形式描述一种约定;接口只有被类实现了才有意义。,1、声明接口public interface 接口 extends 父接口列表 public static final 数据类型 成员变量=常量值;public abstract 返回值类型 成员方法(参数列表);,Java程序设计实用教程
3、(第4版),public interface Area/可计算面积接口 public abstract double area();/计算面积方法 接口不能被实例化,Java程序设计实用教程(第4版),Java程序设计实用教程(第4版),可计算周长接口,public interface Perimeter public abstract double perimeter();/抽象方法,计算周长,或者:public interface PlaneGraphics/平面图形接口 public abstract double area();/计算面积 public abstract double
4、perimeter();/计算周长,Java程序设计实用教程(第4版),Java程序设计实用教程(第4版),2.声明实现接口的类,修饰符 class 类 extends 父类 implements 接口列表例如,public class Rectangle implements PlaneGraphics实现接口的非抽象类必须实现所有接口中的所有抽象方法,而且参数列表必须相同,否则声明为抽象类,接口的例子:/抽象出跑的行为 public interface Runner public void run();public class Car implements Runnerpublic voi
5、d run()System.out.println(car run.);public class Dog implements Runnerpublic void run()System.out.println(“dog run.);,/抽象出演奏的行为 public interface Instrument public void play()public class Lute implements Instrument/琵琶public void play()public class Accordion implements Instrument/手风琴public void play()
6、,图4.1 图形接口与实现图形接口的类,【例4.1】图形接口与实现图形接口的类设计可计算面积接口PlaneGraphics。设计长方形类Rectangle,实现平面图形接口。练习:设计圆形类Circle,实现平面图形接口。,接口的特点接口中成员的访问权限都是public接口中的成员方法都是公有的、抽象的实例成员方法,默认修饰符public abstract;接口中的所有抽象方法必须全部被实现接口的类覆盖接口中的成员变量都是常量、静态的,默认修饰符public static final;接口不能被实例化,只能通过其实现类实例化。PlaneGraphics g1=new Rectangle(10,
7、20);接口是引用数据类型,用接口实现多重继承:一个类可以继承一个父类并实现多个接口图4.2 继承机制,【例4.2】长方体类继承长方形类并实现立体图形接口设计立体图形接口SolidGraphics,包含抽象的求体积方法volume();设计长方体类Cuboid,继承长方形类并实现立体图形接口,重写求面积方法以求长方体表面积,实现求体积方法。练习:设计圆球类Globe,继承圆形类,实现立体图形接口,图4.3 长方体类的多重继承,【例4.3】球类实现多个接口图4.4 球类的多重继承,接口的继承,图4.5 接口的继承,接口与抽象类的区别相同点:1.两者都可包含抽象方法2.两者都不能被实例化3.两者都
8、是引用数据类型不同点:1.抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法;2.抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能;3.抽象类中成员具有与普通类成员一样的访问权限;接口中成员的访问权限均是public4.抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全部是抽象方法,不能声明构造方法5.抽象类中可以声明成员变量;接口中只能声明常量。,4.2 内部类和内部接口,内部类和内部接口是声明在其他类和接口内部的内嵌类型,包含内部类型的类或接口称为外层类型或外部类型。,声明内部类public class Line/直线类,外
9、部类 protected Point p1,p2;/直线的起点和终点 protected class Point/点类,内部类 protected int x,y;/内部类的成员变量 protected Point(int x,int y)/内部类的构造方法 this.x=x;this.y=y;,内部类特性内部类的类特性1.内部类不能与外部类同名2.内部类具有封装性3.内部类具有继承性4.内部类具有抽象性内部类的成员特性1.使用点运算符“.”引用内部类。例如:Line.Point定义对象:Line.Point p=new Line().new Point();2.内部类具有4种类中成员的访问权
10、限3.内部类具有静态特性,内部类的作用:可以更好地实现信息隐藏,因为可以定义为类成员的四种访问权限可以无条件访问其外部类的所有成员;可以实现多重继承;当一个类继承的父类和实现的接口有同名方法时,可以避免冲突。,Java程序设计实用教程(第4版),4.3 Java API基础(了解),4.3.1 java.lang包中的基础类库4.3.2 java.util包中的工具类库API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
11、,Java程序设计实用教程(第4版),4.3.1 java.lang包中的基础类库,Object类package java.lang;public class Object public Object()/构造方法 public final Class getClass();/返回当前对象所在的类 public boolean equals(Object obj)/比较当前对象与obj是否相等 public String toString()/返回当前对象的信息字符串 protected void finalize()throws Throwable/析构方法,Java程序设计实用教程(第4版
12、),2.Math数学类,public final class Math extends Object常量 public static double abs(double a)/求绝对值 public static double random()/返回一个0.01.0之间的随机数 public static double pow(double a,double b)/返回a的b次幂 public static double sqrt(double a)/返回a的平方根值 public static double sin(double a)/返回a的正弦值,Java程序设计实用教程(第4版),3.
13、Comparable可比较接口,public interface Comparable int compareTo(T cobj)/比较对象大小 其中,是Comparable接口的参数,表示一个类。,Java程序设计实用教程(第4版),MyDate类对象比较大小,public class MyDate implements Comparable public int compareTo(MyDate d)/约定比较日期大小的规则,返回-1、0、1 if(this.year=d.year,Java程序设计实用教程(第4版),4.基本数据类型的包装类,8个Byte、Short、Integer、Lo
14、ng、Float、Double、Character、Boolean。,Java程序设计实用教程(第4版),Integer,public final class Integer extends Number implements Comparable public static final int MIN_VALUE=0 x80000000;/最小值-231 public static final int MAX_VALUE=0 x7fffffff;/最大值231-1 private final int value;/私有最终变量,构造时赋值 public Integer(int value)/
15、构造方法 public Integer(String s)throws NumberFormatException public static int parseInt(String s)throws NumberFormatException/将字符串转换为整数,静态方法,Java程序设计实用教程(第4版),Integer,public String toString()/覆盖Object类中方法public static String toBinaryString(int i)/将i转换成二进制字符串,i时,省略高位0public static String toOctalString(i
16、nt i)/将i转换成八进制字符串,i时,省略高位0public static String toHexString(int i)/将i转换成十六进制字符串public boolean equals(Object obj)/覆盖Object类中方法 public int compareTo(Integer iobj)/比较两个对象值大小,返回1、0或1,Integer类的常见用法,Integer in=new Integer(“123”);/定义一个Integer对象,对应整数值123int b=in.intValue();/实现Integer类型和int之间的转换int a=Integer.
17、parseInt(“123”);/将字符串”123”转换为整数123,获取字符串中整数值int b=Integer.parseInt(“110”,2);/将字符串”110”按2进制转换为整数6Integer in=new Integer(123);,Java程序设计实用教程(第4版),Java程序设计实用教程(第4版),Double类,public final class Double extends Number implements Comparable public Double(double value)public Double(String s)throws NumberForma
18、tException public static double parseDouble(String s)throws NumberFormatException/将串s转换为浮点数 public double doubleValue()/返回当前对象中的浮点数值,Double类型用法,Double d1=new Double(12.5);/定义一个Double对象,对应整数值12.5double d2=d1.doubleValue();/实现Double类型和double之间的转换double d=Double.parseDouble(12.12);/获取字符串中浮点数的值,Java程序设计
19、实用教程(第4版),Java程序设计实用教程(第4版),5.String字符串类,public final class String extends Object implements java.io.Serializable,Comparable,CharSequence private final char value;/字符数组,最终变量 public String()/构造方法 public String(String original)public String toString()/覆盖Object类中方法 public int length()/返回字符串的长度 public b
20、oolean equals(Object obj)/比较字符串是否相等 public boolean equalsIgnoreCase(String s)/忽略字母大小写 public int compareTo(String s)/比较字符串的大小 public int compareToIgnoreCase(String str),Java程序设计实用教程(第4版),Person类按姓名比较对象大小,public class Person implements Comparable public int compareTo(Person p)return pareTo(p.name);/比
21、较姓名大小,调用String类的compareTo()方法【思考题4-1】修改MyDate类的compareTo(d)方法实现,返回两个日期相距的天数。Person类按出生日期比较对象大小。Student类能否比较对象大小?能否实现按学号比较对象大小?为什么?,Java程序设计实用教程(第4版),7.Class类,public final class Class public String getName()/返回当前类名字符串 public Class getSuperclass();/返回当前类的父类 public Package getPackage()/返回当前类所在的包this.ge
22、tClass().getName()this.getClass().getSuperclass().getName()this.getClass().getPackage().getName(),Java程序设计实用教程(第4版),8.System系统类(了解),public final class System extends Object public final static InputStream in=nullInputStream();public final static PrintStream out=nullPrintStream();public final static
23、PrintStream err=nullPrintStream();public static native viod arraycopy(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 getPr
24、operties()/获得系统全部属性 public static String getProperty(String key)/获得指定系统属性,Java程序设计实用教程(第4版),复制数组,public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)例如:int a=1,2,3,4,5;int b;arraycopy(a,0,b,1,4);/将a数组的前4个元素复制到b数组中,Java程序设计实用教程(第4版),9.Runtime运行时类,public class Runtime
25、 extends Object public static Runtime getRuntime()/返回与当前应用程序相联系的运行时环境 public long totalMemory()/返回系统内存空间总量 public long freeMemory()/返回系统内存剩余空间的大小,Java程序设计实用教程(第4版),4.3.2 java.util包中的工具类库1.日期类,Date日期类public class Date extends Object implements java.io.Serializable,Cloneable,Comparable public Date()/获
26、得系统当前日期和时间的Date对象 this(System.currentTimeMillis();public Date(long date)/以长整型值创建Date对象 public int compareTo(Date date)/比较日期大小,返回0、1、-1,Java程序设计实用教程(第4版),(2)Calendar类,public abstract class Calendar extends Object implements Serializable,Cloneable,Comparable public static final int YEAR/年,常量 public st
27、atic final int MONTH/月 public static final int DATE/日 public 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/星期,Java程序设计实用教程(第4版),(2)Calendar类,public abstract class Calendar extends
28、Object implements Serializable,Cloneable,Comparable public static 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 mo
29、nth,int date,int hour,int minute)例如,Calendar now=Calendar.getInstance();/获得实例int year=now.get(Calendar.YEAR);/获得对象中的年份值,Java程序设计实用教程(第4版),(3)GregorianCalendar类,public class GregorianCalendar extends Calendar public GregorianCalendar()/以当前日期时间创建对象 public GregorianCalendar(int year,int month,int day)p
30、ublic GregorianCalendar(int year,int month,int day,int hour,int minute,int second)public boolean isLeapYear(int year)/判断是否闰年/例3.2 MyDate类中,获得当前日期对象的年份值thisYear=new GregorianCalendar().get(Calendar.YEAR);【例4.3】月历。,Java程序设计实用教程(第4版),2.Comparator比较器接口,public interface Comparator public abstract boolean
31、 equals(Object obj);/比较两个比较器对象是否相等 public abstract int compare(T cobj1,T cobj2);/指定比较两个对象大小的规则【例4.4】Person类的多种比较规则。(1)约定多种比较对象大小的规则(2)约定多种比较对象相等的规则,Java程序设计实用教程(第4版),3.Arrays数组类,排序public static void sort(Object a)public static void sort(T a,Comparator c)二分法(折半)查找public static int binarySearch(Object
32、 a,Object key)public static int binarySearch(T a,T key,Comparator c),本章小结,1、掌握接口的定义,实现接口类的用法;2、理解接口的作用3、了解内部类4、了解Java基础类库5、理解Integer,Double类的应用和分别与int,double类型的关系,Java程序设计实用教程(第4版),练习,1、定义员工接口Employee,包含计算工资抽象方法;2、定义小时工类HourlyWorker实现员工接口,属性:每小时工资、工作小时数功能:设置每小时工资、设置工作小时数、重写计算工资方法;3、定义销售员工类SalesEmployee实现员工接口,属性:销售额;功能:设置销售额、重写计算工资方法,基本工资3000,销售额10000以下部分,提成10%,销售额10000-30000之间部分,提成8%,销售额高于30000部分提成5%。,Java程序设计实用教程(第4版),