J2EEWeb开发技术(第3章 Java面向对象编程)2011年1月.pdf
1Ch3-1第三章Java面象对象编程3.1 面向对象编程常用术语面向对象编程常用术语3.8 异常处理异常处理3.2 Java类与对象类与对象3.3 类中的成员变量类中的成员变量3.4 类中的成员函数类中的成员函数3.5 继承与抽象类继承与抽象类3.6 接口接口3.7 包包Ch3-23.1 面象对象编程常用术语面象对象编程常用术语1.OOP:Oriented Object Programming面象对象编程2.类:类:class类是一种数据结构,它将应用程序需要处理和表达的事物划分为若干数据项(成员变量成员变量或数据域数据域)来描述,然后将处理这些数据项的基本方法方法(成员函数成员函数)与这些数据项捆绑在一起进行封装封装(Encapsulation),形成一个类。Ch3-33.1 面象对象编程常用术语(续面象对象编程常用术语(续1)若干数据项若干数据项也称为域/属性/成员变量类声明类声明若干方法若干方法也称为成员函数Ch3-43.1 面象对象编程常用术语(续面象对象编程常用术语(续2)3.对象:对象:object一个客观事物。对象的数据描述在程序中用变量实现;程序中的一切变量都可称为对象。4.实例:实例:instance对象的数据描述在存储器中的存储实现。Java的全部变量(variable)有两种类型:占用存储的,称为实例实例(实体实体)型变量型变量;不占存储的,称为引用型变量引用型变量。Ch3-53.1 面象对象编程常用术语(续面象对象编程常用术语(续3)类与对象的例子)类与对象的例子学生类:类名:Student数据:姓名;学号;性别;专业;生日;状态;等等方法:登记;注册;注销;查询;等等声明对象变量:Student a,b;/学生学生a和和b4.多态多态:polymorphism在Java中,多态主要是指方法(成员函数)的重载重载/覆盖覆盖(reload/override),即允许定义同名方法,但方法的自变量(形参)的数据类型或者个数不一样。Ch3-63.1 面象对象编程常用术语(续面象对象编程常用术语(续4 完)完)5.继承继承:inheritance子类拥有父类父类(超类)的部分或者全部数据成员和函数成员,即这些成员无需在子类中重复定义,只需从父类继承。同时,子类还可以定义自己的数据成员和函数成员。6.封装封装:encapsulation封装主要是指类的对象尽量隐藏自己的“私有”信息(数据成员),即对其它类的方法这些信息是不可访问的,除非通过调用该类的公有成员函数。封装的目的是减少类与类之间的耦合度耦合度,提高软件可靠性。2Ch3-73.2 Java类与对象类与对象3.2.1 Java类的定义类的定义public abstract|final class 类名extends 父类名 implements 接口名 成员变量(域)定义成员函数(方法)定义public:公有类,该类可以被所属包以外的类访问;缺省缺省表示该类只能被本包中的类访问。Ch3-83.2 Java类与对象(续类与对象(续1)abstract:抽象类。抽象类不能用实例化。final:最终类。最终类不能派生子类。extends 与 implements 见后续章节。3.2.2 声明对象与创建对象声明对象与创建对象Syntax:类名 对象名1,对象名2,.;例例:Student a,b;说明说明:上述语法仅声明了对象标识符,并未真正地创建对象(即为对象建立存储空间)。Ch3-93.2 Java类与对象(续类与对象(续2)创建对象实例创建对象实例Syntax:对象名=new 类名类名(初始化参数);例例:Student a;a=new Student();Student b=new Student();说明说明:创建实例时,成员初值按以下顺序确定:Student 实例1Student 实例2ab远程堆远程堆Ch3-103.2 Java类与对象(续类与对象(续3)构造函数中有赋值赋值吗?成员变量声明时有初始化初始化吗?YES表2.1 默认值默认值NONOYESCh3-113.2 Java类与对象(续类与对象(续4)例例3.1 定义表示平面坐标点的类Point,输入坐标点,计算并输出两点之间的距离。import java.io.*;/C3_1.javaimport java.lang.Math;import java.util.Scanner;class Point double x,y=0;public Point()/无参构造函数无参构造函数public Point(double x,double y)/双参构造函数双参构造函数 this.x=x;this.y=y;Ch3-123.2 Java类与对象(续类与对象(续5)public void input()/定义输入本坐标点的方法定义输入本坐标点的方法 Scanner in=new Scanner(System.in);x=in.nextDouble();y=in.nextDouble();public void output()System.out.print(+x+,+y+);3Ch3-133.2 Java类与对象(续类与对象(续6)public class C3_1 public static double dist(Point a,Point b)double dx=a.x-b.x,dy=a.y-b.y;return Math.sqrt(dx*dx+dy*dy);Ch3-14public static void main(String args)Point a=new Point(),b=new Point(1,2),c=new Point();System.out.print(a point=);a.output();System.out.println();System.out.print(b point=);b.output();System.out.println();System.out.println(Input c point,format:x y);c.input();System.out.print(c point=);c.output();System.out.println();double d=dist(b,c);System.out.println(The distance of b from c is:+d);/该程序在该程序在MyEclipse 8.6中的运行画面如下中的运行画面如下:3.2 Java类与对象(续类与对象(续7)Ch3-153.2 Java类与对象(续类与对象(续8)Ch3-163.2 Java类与对象(续类与对象(续9)3.2.3 类变量的引用特性类变量的引用特性当类的实体对象用于赋值对象用于赋值以及函数参数传递函数参数传递时,类的成员并没有进行复制,而仅仅是实现引用(引用(Reference)。引用对象名(被赋值的对象名或者形参)仅仅是一个代号,没有具体的存储空间,它只是被引用的实体对象的一个别名。对引用对象名进行的任何操作都相当于对被引用的实际对象进行了操作。Ch3-173.2 Java类与对象(续类与对象(续10)1.程序设计语言变量的三种类型程序设计语言变量的三种类型JavaC+示例示例变量类型变量类型所有类变量所有类变量如:Integer a;Double b;int&a;引用型变量引用型变量无无int a;指针变量指针变量所有基本数据类型变量所有基本数据类型变量如:int a;double b;int a;实体型变量实体型变量Ch3-183.2 Java类与对象(续类与对象(续11)2.什么是引用(什么是引用(Reference)?)?(1)类型为T的引用型变量,该变量实际上没有存储T类型数据的存储空间,而只存储存储一个指向T类型数据的索引(索引的实质是一个内存地址),该索引指向的T类型数据称为被引用变量被引用变量;(2)对引用型变量进行除赋值以外的一切操作除赋值以外的一切操作,相当于对被引用变量进行操作;(3)用实体变量向引用型变量赋值赋值,实体变量的值并没有被复制,而只是将该实体变量的索引存入引用型变量。4Ch3-193.Java类变量都是(隐式声明为)引用型变量例子类变量都是(隐式声明为)引用型变量例子1:Double a=new Double(1.5),b=a,c=b;double x=2.5,y=x,z=y;3.2 Java类与对象(续类与对象(续12)abc1.52.52.52.5xyz引用型类变量引用型类变量a,b,c 与实体型普通变量与实体型普通变量x,y,z的存储差异的存储差异Ch3-203.2 Java类与对象(续类与对象(续13)例子例子2:两个平面直角坐标点作向量加法的函数。class Point int x,y;public Point(int x,int y)this.x=x;this.y=y;Point add(Point a,Point b)Point c=new Point();c.x=a.x+b.x;c.y=a.y+b.y;return c;主程序调用形式主程序调用形式:Point p=add(a,b);(4,6)a(1,2)b(3,4)p主程序中变量子程序中变量abcCh3-214.比较类变量相等比较类变量相等(1)引用是否相等的比较引用是否相等的比较(用用=运算符运算符)(2)数据成员是否相等的比较数据成员是否相等的比较(equals成员函数成员函数)例例3.4:Double a=new Double(1.5),b=a;Double c=new Double(1.5);则有 a=b 值为 truea=c 值为 falsea.equals(b)值为 truea.equals(c)值为 true3.2 Java类与对象(续类与对象(续14)a1.5b1.5cCh3-225.类变量的默认初值:类变量的默认初值:null关键字null表示空引用,它是类变量的默认初值;null可以向类变量赋值或者与类变量比较相等。如:如:Point a=null;if(a=null)6.Java类变量全部是引用类型的优点类变量全部是引用类型的优点(1)比指针更安全比指针更安全(2)节省类变量赋值操作的时间节省类变量赋值操作的时间(3)节省类变量的存储空间节省类变量的存储空间3.2 Java类与对象(续类与对象(续15)Ch3-237.Java类变量全部是引用类型的缺点赋值操作(包括函数参数传递与返回值)无法实现类对象实体的复制。例:怎样实现类对象实体的整体拷贝?方法类变量全部是引用类型的缺点赋值操作(包括函数参数传递与返回值)无法实现类对象实体的复制。例:怎样实现类对象实体的整体拷贝?方法:拷贝构造函数拷贝构造函数+new命令命令;拷贝赋值成员函数拷贝赋值成员函数public Point(Point p)x=p.x;y=p.y;/类类Point的拷贝构造函数的拷贝构造函数public set(Point p)x=p.x;y=p.y;/拷贝赋值成员函数拷贝赋值成员函数Point a=new Point(1,2),b=new Point(a);/a,b 指向两个实体对象指向两个实体对象a.set(b);/将将b引用的对象数据成员拷贝到引用的对象数据成员拷贝到a引用的对象中引用的对象中3.2 Java类与对象(续类与对象(续16)Ch3-248.Java基本数据类型变量全部是实体类型的缺点无法实现如下所示两个变量交换值的函数基本数据类型变量全部是实体类型的缺点无法实现如下所示两个变量交换值的函数/两个变量交换值的两个变量交换值的C+函数函数void swap(int&a,int&b)int temp=a;a=b;b=temp;/两个变量交换值的两个变量交换值的C函数函数void swap(int p,int q)int temp=p;p=q;q=temp;3.2 Java类与对象(续类与对象(续17完)完)5Ch3-25例例3.2 单链表的建立与输出。说明:本例采用前插法说明:本例采用前插法(先入后出法建立单链表先入后出法建立单链表)import java.io.*;/C3_5.javaclass Node /定义单链表结点数据结构定义单链表结点数据结构 int data;Node next;public Node(int ch,Node new_node)data=ch;next=new_node;/引用赋值,不新建对象引用赋值,不新建对象3.2 Java类与对象(续类与对象(续19)Ch3-26public class C3_2 public static void main(String args)Node h=new Node(0,null),p;/h为附加头结点为附加头结点for(int i=1;i0)return sum/num;return 0;静态初始化器可去掉吗?静态初始化器可去掉吗?函数前的函数前的static可去掉吗?可去掉吗?Ch3-343.3 类中的成员变量类中的成员变量(续续6)protected String name;/name为引用型为引用型,初值为初值为nullprotected double score;public Stu(String na,double sc)/构造函数构造函数 name=new String(na);score=sc;/姓名实例化姓名实例化sum+=score;num+;/每建立一个学生,成绩累加,人数自加每建立一个学生,成绩累加,人数自加1Ch3-353.3 类中的成员变量类中的成员变量(续续7)public class C3_3 public static void main(String args)Stu a=new Stu3;/元素初值为元素初值为nulla0=new Stu(张三,85);/实例化a1=new Stu(李四,58);a2=new Stu(王五,70.5);/*或者如下所示或者如下所示Stu a=new Stu(“张三张三”,85),new Stu(李四李四,58),new Stu(王五王五,70.5);*/Ch3-363.3 类中的成员变量类中的成员变量(续续8)for(int i=0;i3;i+)System.out.println(ai.name+ai.score);System.out.println(total=+Stu.num+v=+Stu.getAvScore();本例学习要点本例学习要点:a.静态变量的定义、初始化与使用b.类的引用变量与实例变量c.类的静态变量与非静态变量(实例变量)的设置原则d.类对象数组的定义与实例化方法Stu.num可以写成可以写成a0.num吗?吗?a1.num呢?呢?7Ch3-373.3 类中的成员变量类中的成员变量(续续9)3.3.3 最终域最终域使用final关键字修饰的成员变量,它的值在程序运行期间都不能被修改,即不允许向它赋值。例如例如:class Circle public static final double pi=3.1415926;final int c;/c初值为初值为0final也能修饰局部变量,该变量值在模块运行期内不能被修改。Ch3-383.3 类中的成员变量类中的成员变量(续续10)3.3.4 易失域易失域使用volatile关键字修饰的成员变量,它的存储空间和访问权由多个程序(如线程)共享。Ch3-393.4 类中的成员函数类中的成员函数3.4.1 成员函数定义与访问成员函数定义与访问syntax:权限修饰符非权限修饰符 T 函数名(形参)throws 异常列表1.权限修饰符权限修饰符syntax:public|protected|private|private protected说明:说明:同成员变量的访问权限的规定2.非权限修饰符非权限修饰符syntax:static|final|abstract|native|synchronized说明:说明:缺省为一般类型,其它类型见后续课件Ch3-403.4 类中的成员函数类中的成员函数(续续1)3.成员函数的访问方法成员函数的访问方法(1)本类与子类方法中(若权限允许访问)syntax:成员函名(实参列表)(2)其它类的方法中(若权限允许访问)syntax:该类对象名.成员函数名(实参列表)4.throws 见后面的异常处理一节。3.4.2 构造函数名字与类名相同没有返回值允许重载主要完成成员变量初始化工作构造函数名字与类名相同没有返回值允许重载主要完成成员变量初始化工作Ch3-413.4 类中的成员函数类中的成员函数(续续2)例例3.4 类中的内嵌对象与初始化方法。import java.io.*;/C3_4.javaclass Ctime protected int h,m;public Ctime(int h,int m)/参数构造参数构造 this.h=h;this.m=m;public Ctime()/默认构造默认构造public Ctime(Ctime t)h=t.h;m=t.m;/拷贝构造拷贝构造public void output()System.out.println(h+:+m);Ch3-423.4 类中的成员函数类中的成员函数(续续3)class Airplane protected Ctime depart=new Ctime();protected Ctime arrival;public Airplane(Ctime d,Ctime a)depart.h=d.h;depart.m=d.m;/已是实体,不另建已是实体,不另建arrival=new Ctime(a);/不是实体,则新建不是实体,则新建public void output()System.out.print(depart:);depart.output();System.out.print(arrival:);arrival.output();8Ch3-43public class C3_4 public static void main(String args)Airplane a=new Airplane(new Ctime(15,30),new Ctime(17,15);a.output();本例学习要点:本例学习要点:a.内嵌对象实例化的方法b.构造函数重载与调用的三种主要形式:默认构造;参数构造;拷贝构造默认构造;参数构造;拷贝构造3.4 类中的成员函数类中的成员函数(续续4)Ch3-443.4 类中的成员函数类中的成员函数(续续5)3.4.2 析构函数析构函数每个类默认用finalize()销毁对象,即将该对象内存资源还原给系统。方法finalize()没有参数,也不返回值,且不能重载。尽管Java有内存回收机制,但会降低系统运行效率,因此程序员用finalize()来主动销毁对象可能提高效率。例例3.5 输入若干整数到0时停止,先入先出法建立带附加头结点的单链表,删除链表中的负数结点后输出。Ch3-453.4 类中的成员函数类中的成员函数(续续6)import java.io.*;/C3_5.javaimport java.util.Scanner;class Node int data;Node next;public Node(int ch,Node new_node)data=ch;/赋值赋值next=new_node;/引用,不新建对象引用,不新建对象public void del()/销毁本结点对象销毁本结点对象 try finalize();catch(Throwable e)Ch3-46public class C3_5 public static Node Crt()/创建链表创建链表 Node h=new Node(0,null),p,last=h;/h为头结点为头结点Scanner in=new Scanner(System.in);while(true)int x=in.nextInt();if(x=0)break;p=new Node(x,null);last.next=p;last=p;last.next=null;return h;3.4 类中的成员函数类中的成员函数(续续7)Ch3-473.4 类中的成员函数类中的成员函数(续续8)public static void prt(Node h)/输出链表输出链表 Node p=h.next;while(p!=null)System.out.print(p.data+);p=p.next;public static void erase(Node h)/删除小于删除小于0的结点的结点 Node pr=h,p=h.next,q;while(p!=null)if(p.data0)q=p.next;pr.next=q;p.del();p=q;else pr=p;p=p.next;Ch3-483.4 类中的成员函数类中的成员函数(续续9)public static void main(String args)System.out.println(输入若干整数,到0时停止:);Node h=Crt();System.out.println(原始链表为:);prt(h);System.out.println();erase(h);System.out.println(删除小于0的结点后为:);prt(h);System.out.println();/end of class C3_59Ch3-493.4 类中的成员函数类中的成员函数(续续10)3.4.3 static(静态方法、类方法静态方法、类方法)方法不能访问非静态(实例)变量与方法用于处理静态型成员变量与方法访问方法:方法不能访问非静态(实例)变量与方法用于处理静态型成员变量与方法访问方法:类名.静态方法名(实参)对象名.静态方法名(实参)3.4.4 final(最终最终)方法不能被子类中的方法覆盖方法不能被子类中的方法覆盖(override)的方法的方法3.4.4 abstract(抽象抽象)方法不能是方法不能是static或者或者final方法不能有函数体方法不能有函数体(函数头部直接用函数头部直接用;结束结束)Ch3-503.4 类中的成员函数类中的成员函数(续续11完完)含有抽象方法的类必须是抽象类抽象类的子类若不是抽象类,必须实现父类中所有抽象方法含有抽象方法的类必须是抽象类抽象类的子类若不是抽象类,必须实现父类中所有抽象方法3.4.5 native(本地本地)方法用其它程序语言实现的方法方法用其它程序语言实现的方法3.4.6 synchronized(同步同步)方法用于多线程同步的方法与方法用于多线程同步的方法与static连用,则执行该静态方法前类加锁用于修饰非静态方法时,该方法执行前,对象加锁连用,则执行该静态方法前类加锁用于修饰非静态方法时,该方法执行前,对象加锁Ch3-513.5 继承与抽象类继承与抽象类3.5.1 类的继承类的继承某个类得到另一个类的全部或者部分成员称为继承继承;该类称为子类子类,而另一个类称为超类超类或父类父类。子类由父类派生派生,并继承继承父类的特性。Syntax:class 子类名 extends 父类名 问题问题:父类的哪些成员可以被子类继承?答答:除private和缺省修饰的成员(成员包括域域和方法方法)Ch3-523.5 继承与抽象类继承与抽象类(续续1)类A派生类B,类B又派生类C的示意图ABC类C的对象储空间A成员成员B成员成员C成员成员Ch3-533.5 继承与抽象类继承与抽象类(续续2)1.Java只支持单继承只支持单继承一个类只允许有且仅有唯一的一个父类2.被子类继承的父类成员的访问权属性不变如被子类继承的父类成员的访问权属性不变如:父类中的protected 成员,子类中仍为protected.3.Override(覆盖覆盖)子类成员与父类中的可被继承的成员同名,称为Override(覆盖覆盖),覆盖发生时,子类成员有效,而父类成员被掩蔽。4.父类域的构造方法父类域的构造方法Ch3-543.5 继承与抽象类继承与抽象类(续续3)可继承域可继承域可以用子类构造函数的初始化参数来赋初值;未被继承域未被继承域或在子类构造函数中未指定初值的可继承域用父类的默认构造父类的默认构造。例例3.6 继承的例子。import java.io.*;/C3_6.javaclass A /定义父类定义父类 private int x=11;protected int y=12,z=13;public A()public A(int a,int b,int c)x=a;y=b;z=c;10Ch3-553.5 继承与抽象类继承与抽象类(续续4)class B extends A /class A derives class B private int x=21,y=22;public B()public B(A a)z=a.z;/用父类对象拷贝构造用父类对象拷贝构造public void output()System.out.println(“B-x:”+x);/B自己的私有型自己的私有型xSystem.out.println(“B-y:”+y);/B自己的私有型自己的私有型ySystem.out.println(“B-z:”+z);/继承继承A的保护型的保护型zCh3-563.5 继承与抽象类继承与抽象类(续续5)public class C3_6 public static void main(String args)B b1=new B(),b2=new B(new A(-11,-12,-13);System.out.println(类B对象b1的域:);b1.output();System.out.println(类B对象b2的域:);b2.output();Ch3-573.5 继承与抽象类继承与抽象类(续续6)3.5.2 子类对象关于实例方法的绑定规则用子类对象子类对象关于实例方法的绑定规则用子类对象(或子类对象的引用或子类对象的引用)调用从父类继承的实例方法调用从父类继承的实例方法时:1.父类方法未被子类方法覆盖始终执行父类的方法父类方法未被子类方法覆盖始终执行父类的方法,该方法访问的域一定是父类的域(即使该域未被子类继承或者已被子类的域覆盖)2.父类方法被子类方法覆盖始终执行子类的方法父类方法被子类方法覆盖始终执行子类的方法(父类中未被继承的域无法访问)Ch3-583.5 继承与抽象类继承与抽象类(续续7)3.5.3 对象引用的向上强制对象引用的向上强制当子类方法或者其它类的方法中需要访问父类中被子类域覆盖的成员时,可以使用向上强制。例如:例如:class B b=new B();A a=b;/向上强制引用向上强制引用System.out.println(a.y=+a.y);/输出输出12System.out.println(b.y=+b.y);/输出输出 22问题与思考:问题与思考:A类中的私有成员x可以用这种方法访问吗?Ch3-593.5 继承与抽象类继承与抽象类(续续8)例例3.7 成员函数绑定与向上强制的例子。对例3.6增加如下代码:/类类A中增加以下方法中增加以下方法public A(A a)x=a.x;y=a.y;z=a.z;public void pr()System.out.println(A-x:+x);System.out.println(A-y:+y);System.out.println(A-z:+z);Ch3-603.5 继承与抽象类继承与抽象类(续续9)/子类子类B中增加以下方法中增加以下方法public B(A a)super(a);/拷贝构造拷贝构造A的域的域/主程序如下所示主程序如下所示public class C3_7 public static void main(String args)B b1=new B();B b2=new B(new A(-11,-12,-13);11Ch3-61System.out.println(类B对象b1的域:);b1.output();b1.pr();/pr打印打印b1内嵌的内嵌的A的域的域System.out.println(类B对象b2的域:);b2.output();b2.pr();/pr打印打印b2内嵌的内嵌的A的域的域A ra=b2;/向上强制引用向上强制引用System.out.println(A-y of b2=+ra.y);3.5 继承与抽象类继承与抽象类(续续10)Ch3-623.5 继承与抽象类继承与抽象类(续续11)3.5.3 this与与supper的使用的使用1.this引用本对象自身2.supper在子类方法中引用子类对象中内嵌的父类对象。当子类成员名与父类成员名同名时,特别有用。例例3.8 改进例3.7的B类输出函数output()(1)A类中方法名pr改名为outputCh3-633.5 继承与抽象类继承与抽象类(续续12)(1)A类中方法名pr改名为output(2)B类中output方法改写如下:public void output()System.out.println(“B-x:”+x);/B自己的私有型自己的私有型xSystem.out.println(“B-y:”+y);/B自己的保护型自己的保护型ySystem.out.println(“B-z:”+z);/继承继承A的保护型的保护型zsuper.output();(3)主程序中去除b1.pr()以及b2.pr();主类名改为C3_8Ch3-643.5 继承与抽象类继承与抽象类(续续13)3.5.3 抽象类抽象类含有抽象方法的类为抽象类。1.抽象方法的定义方法抽象方法的定义方法只有方法头的声明,然后用;结束。2.抽象类的用法抽象类的用法用于派生子类,子类中必须实现抽象类中的抽象方法,才能实例化。凡是含有抽象方法的类都必须是抽象类,抽象类不能实例化。Ch3-653.5 继承与抽象类继承与抽象类(续续14)例例3.9 抽象基类的简单示例。import java.io.*;/C3_9.javaabstract class Animal protected String name;public abstract void output();class Cat extends Animal public Cat()name=new String(cat);public void output()System.out.println(name);Ch3-663.5 继承与抽象类继承与抽象类(续续15完完)class Dog extends Animal public Dog()name=new String(dog);public void output()System.out.println(name);public class C3_9 public static void main(String args)Cat a=new Cat();Dog b=new Dog();a.output();b.output();12Ch3-673.6 接口接口3.6.1 接口的概念接口的概念接口类似于类,它用于封装一些常量和抽象方法(只能是抽象方法),常用于实现不同类之间的一些公共方法实现不同类之间的一些公共方法。一个类可以从多个接口派生,相当于多继承多继承。如果该类没有实现接口中的所有方法(都是抽象方法),则不能实例化。Ch3-683.6 接口接口(续续1)3.6.2 接口的定义接口的定义public interface 接口名 extends 父类接口名 publicstaticfinal T 域名=常量表达式;publicabstractnative T 方法名(形参)trhow 异列表;Ch3-693.6.3 接口的实现接口的实现Syntax:class 类名 extends 父类名 implements 接口1,接口2,说明说明:类中若不实现接口中的函数,该类必须定义为抽象类。3.6 接口接口(续续2)Ch3-703.6 接口接口(续续3)例例3.10 实现接口的例子。实现接口的例子。import java.io.*;/C3_10.javainterface 收费 public void 收取费用();class 公共汽车 implements 收费 public void 收取费用()System.out.println(公共汽车:1元/张,不计算公里数);Ch3-713.6 接口接口(续续4)class 出租车 implements 收费 public void 收取费用()System.out.println(出租车:1.60元/公里,起价5.60元);class 电影院 implements 收费 public void 收取费用()System.out.println(电影院:门票40元/张);Ch3-723.6 接口接口(续续5)public class C3_10public static void main(String args)公共汽车 七路=new 公共汽车();出租车 天宇=new 出租车();电影院 红星=new 电影院();七路.收取费用();天宇.收取费用();红星.收取费用();说明:接口一般用于定义一组类所需要的公共方法和静态数据说明:接口一般用于定义一组类所需要的公共方法和静态数据。13Ch3-733.6 接口接口(续续5完完)在Java的系统类和接口中,最典型的接口是事件处理接口,即MouseListener和MouseMotionListener,这两个接口中定义了所有处理鼠标事件的方法,当一个类实现这两个接口后,就可以处理鼠标事件了。Ch3-743.7 包包3.7.1 什么是包(什么是包(Package)?包(Package)是Java提供的一种区别类名字空间的机制,是类的组织方式,包对应一个文件夹包对应一个文件夹,包中还可以再有包,称为包等级。我们在源程序中可以声明类所在的包,就像保存文件时要说明文件保存在哪个文件夹中一样。同一包中的类名不能重复,不同包中的类名可以相同。当源程序中没有声明类所在的包时,Java将类放在默认包默认包中。Ch3-753.7 包包(续续1)Java类库是以包的形式实现的,每个包里都有含有多组相关的类,除一般类之外,包还包含接口、异常类等。3.7.2 Java系统常用包简介系统常用包简介java.lang 语言包java.util 实用包java.awt抽象窗口工具包java.txt 文本包java.io输入输出流包java.applet 小程序包网络功能包Ch3-763.7 包包(续续2)1.语言包语言包(java.lang)(1)Object 类类所有类的基类。主要方法:equals()等。(2)数据类型封装类数据类型封装类(The Data Type Wrapper)(3)字符串类字符串类(String,StringBuffer)(4)数学类数学类(Math)(5)系统和运行时间类系统和运行时间类(System,Runtime)(6)类操作类类操作类(Class)Ch3-773.7 包包(续续3)(7)异常类异常类(Throwable,Exception,Error)(8)线程类线程类(Thread)(9)过程类过程类(Process)例例3.11 获取系统信息的例子。import java.io.*;/C3_11.javapublic class C3_11public static void main(String args)String s=new String(ABC);Ch3-783.7 包包(续续4)System.out.println(本类名=+s.getClass().getName();System.