Java语言程序设计实用教程第三版课件及代码_第1页
Java语言程序设计实用教程第三版课件及代码_第2页
Java语言程序设计实用教程第三版课件及代码_第3页
Java语言程序设计实用教程第三版课件及代码_第4页
Java语言程序设计实用教程第三版课件及代码_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java语言程序设计实用教程,第六讲 接口与内部类,3,本章学习要点,理解抽象类与接口 理解内部类及其应用 利用接口提供java中多重继承的性质,6.1 接口-抽象类,抽象类,用abstract 修饰的类被称为抽象类。所谓抽象类就是没有具体实例对象的类。 抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。 抽象类的主要用途是用来描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口,定义一个抽象类,abstract class 类名称 成员变量; 方法(); /定义一般方法 abstract 方法(); /定

2、义抽象方法 说明:抽象类中可以包含有一般方法,也可以包含有抽象方法;对于抽象方法不用完成其代码实现,而在派生的子类中实现所有抽象方法,抽象类实现的例子,如前所述你可能对抽象类的概念有点模糊,下面举一个具体实例来作说明。 假设想设计一个形状(shape)的父类cshape,由此类可派生出圆形(circle),长方形(rectangle)于三角形(triangle)等几何形状的类。则父类于子类的派生关系描绘成如下图所示,cshape类,crectangle类,ccircle 类,ctriangle 类,假设这些几何形状均具有“颜色”(color)这个属性,因此可以把color这个数据成员,以及赋值

3、color的方法均设计在父类里,让它继承给各个形状的子类较为方便,如此就不用在每一个几何形状的子类里,设计相同的程序代码来处理“颜色”这个属性的问题。 另外,如果想为每一个几何形状的类设计一个area() 方法,用来显示几何形状的面积,因每种几何形状的面积计算方式并不相同,所以把area() 方法的处理方式设计在父类里并不恰当,但每一个由cshape父类所派生出的子类又都需要用到这一个方法,因此可以在父类里只声明area() 方法,而把area() 方法处理的方法留在子类里来定义,也就是说,把area() 声明成抽象方法即可解决这个问题。根据上述的概念,可编写出如下的父类程序代码,需求假设,a

4、bstract class cshape /定义抽象类 protected string color; /数据成员 public void setcolor(string str) color=str; /一般的方法,用来赋值几何形状的颜色 abstract void area();/抽象类内的抽象方法,定义抽象类 cshape,class ccircle extends cshape cshape double radius; /数据成员public ccircle(double r) /构造函数 radius=r;public void area() system.out.print(“c

5、olor=“+color+”,”);system.out.print(“area=“+3.14*radius*radius,在此处明确定义 area()的处理方法,抽象类cshape派生的子类ccricle,class crectangle extends cshapeint width,height; public crectangle (int w,int h) width=w; height=h;public void area()system.out.print(“color=“+color+”, “);system.out.print(“area=“+width*height,抽象类

6、cshape派生的子类crectangle,public class app10-1 public static void main (string args) cretangle rect=new crectangle(5,10); rect.setcolor(“yellow”); rect.area(); ccircle cir=new ccircle(2.0)cir.setcolor(“green”); cir.area();,应用,6.1 接口-接口,接口的使用,接口(interface)是java所提供的另一种重要功能,它的结构和抽象类非常相似。接口本身也具有数据成员与抽象方法,但它

7、与抽象类有下列两点不同 接口的数据成员必须初始化。 接口里的方法必须全部都声明成abstract(默认),也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法 为什么要使用接口? 类继承对于重用超类中的代码很有用,而java只支持单继承,在遇到需要多继承的情况,可以通过接口来帮助实现。(多态性) 接口的方法可以不是继承链上的类中实现,从而为相互没有关系的类能实现同样功能的一组方法提供一种有效手段,接口的定义,public interface 接口名 extends 父接口名列表 /声明常量字段 publicstaticfinal 数据成员名=常量值; /声明抽象方法 publi

8、cabstract方法名(参数表);,特点: 1、接口的访问控制修饰符只有public。 2、接口类型也可以继承,并且可以多重继承,使用extends。但它与类中的extends不同,它可以有多个父接口,各父接口间用逗号隔开 3、java的类层次结构中有一个顶级类ojbect ,接口没有 4、接口体内只能声明常量字段和抽象方法:接口中的所有常量必须是public static final,方法必须是public abstract,这是系统默认的,不管你在定义接口时,写不写修饰符都是一样的,接口的实现,class 类名extends 父类名 implements 接口名表 类体 1、实现接口可以

9、是某个类的子类,也可以是父类。 2、一个类可以“实现”多个接口功能,从而实现多继承,关键词implements用于表示一个类实现若干接口,接口名之间用逗号隔开。 3、“继承”后的类可以抽象类也可以是普通类,若实现接口的类不是抽象类,则必须实现所有接口的所有方法,即为所有的抽象方法定义方法体 4、类中实现方法时,必须使用与该抽象方法完全一样的名字、返回类型和参数表,否则,就构成重载了,(见例6-3,p105,6.2 内部类,内部类,在一个类(称为”外部类”)里定义另一个类是完全可以的,这称为“内部类”。使用内部类可以非常方便地编写事件驱动程序,例如图形用户界面程序 内部类是一种非常有价值的特性,

10、它能让你在逻辑上将相互从属的类组织起来,并且在类的内部控制访问权限。 内部类作为外部类的成员之一,可以直接访问外部类的其他成员 外部类在其方法中,通过实例化内部类的一个对象才能访问内部类的成员,在方法和作用域里的内部类 内部类可以被创建在方法内部,甚至是任意一个作用域里。 两个理由: 1、多重继承:无论外部类是否已经继承了某个接口的实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。(见p109,例6-4) 2、你要处理一个复杂的问题,需要一个类,但是又不想让大家知道这个类,内部类

11、的使用,匿名内部类,匿名内部类就是没有名字的内部类 如果满足下面的一些条件,使用匿名内部类是比较合适的: 只用到类的一个实例 类在定义后马上用到 类非常小(sun推荐是在4行代码以下) 给类命名并不会导致你的代码更容易被理解 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类(p111,例6-5,6.3 项目案例,会员管理系统登陆模块,网吧会员的上网注册、下网注销 可以计算上网的时间,据此结算上网费用,从预存金额中扣除,数据库设计,会员信息表membertable memberid(会员编号):主键 password(密码) membername(会员名称) idcardnu

12、m(会员卡号) leftmoney(预存余额) integral(积分) 上网记录表record recordid(记录表示号):主键 logtime(登陆时间) logouttime(退出时间) timecount(所用时间) memberid(会员编号):外键,jdbc概述,odbc存在一些缺点:不容易使用,没有面向对象的特性。 jdbc(java database connection) ,java数据库连接。sun公司在1996年提出的一项技术,提供java程序与数据库系统通信的api,主要用于进行java数据库程序开发。 有了jdbc api,不必为访问sybase、oracle数据

13、库分别编写一个专门的程序,只需用jdbc api写一个程序就够了,它可做三件事情: 与数据库建立连接 发送sql语句 处理结果,网络库,数据库驱动程序需要解决应用程序与数据库的通信问题。早期的数据库产品提供一个通过网络与数据库通信的网络库(network libraries) 网络库由运行于客户端的客户端组件和数据库服务器端的服务器端组件组成。在windows系统中是以dll动态链接库形式存在。缺点是每一种数据库有自己的一套api,开发出的程序不能独立于数据库 数据库厂商后来提供一个建立在网络库之上的、统一的高层api,开发人员调用高层api,从而避免与数据库产品紧密相关的网络库,jdbc驱动

14、程序的分类(一,类型1驱动程序:又称jdbc-odbc桥驱动(bridge),这类驱动程序的特色是必须在使用者端的计算机上事先安装好odbc驱动程序,然后通过jdbc-odbc的调用方法,进而通过odbc类存取数据库,类型2驱动程序:这类驱动程序的特色是直接将应用程序与网络库连接,必须在使用驱动程序的计算机上安装网络库,在性能上优于类型1,jdbc驱动程序的分类(二,类型3驱动程序:将运用程序与应用服务器(如weblogic server)连接,要求应用服务器将应用程序的jdbc调用映射到适当的数据库驱动程序上。优点是客户机上不需要安装网络库,如weblogic的池驱动程序是一个类型3的驱动程

15、序,类型4驱动程序:把jdbc操作直接转换成不使用odbc或本机api的本机协议。这种驱动程序是完全用java实现,不需要其它驱动程序和客户端网络库。此类协议由数据库厂家提供,能够实现自身数据的最优访问,jdbc驱动程序的选择,目前的四种不同类型jdbc驱动程序有着不一样的使用方法,所以当我们在连接数据库之前,必须先依照需求选择一个适当的驱动程序。 建议不使用桥接器型的驱动程序,这类型的驱动程序不是用纯java语言所开发,这使得程序的可移植性会变差,而且还需要事先安装其它的特定驱动程序在使用者计算机上,非常麻烦。反观类型三和类型四的驱动程序,不但使程序的可移植性提高,达到跨平台的目的,还省去在

16、使用者计算机上安装其他驱动程序的麻烦,可谓一举数得。所以当我们在为我们的数据库选择驱动程序时,应尽量以类型三和类型四的jdbc驱动程序为主,而类型一和二则为次要的选择,jdbc应用的主要工作步骤,jdbc主要包括以下类:连接(connection)、语句(statement)和结果集(resultset)。 jdbc应用程序的工作步骤: 加载数据库的jdbc驱动程序(由drivermanager类管理) 建立连接(connection),由连接建立语句对象(三种:statement、preparedstatement和callablestatement)以及结果集(resultset)对象 通

17、过语句对象和结果集对象进行各种数据操作,最后关闭连接,jdbc应用示例图(见115表6-1,表6-2,通过jdbc连接数据库的主要步骤(一,import java.sql.*;/核心api import javax.sql;/扩展的api 加载数据库驱动程序:使用class.forname(“sun.jdbc.odbc.jdbcodbcdriver”);其作用是要求jvm查找并加载指定的jdbc驱动程序类,也就是说jvm会执行该类的静态代码段 注意:在jdbc中,要求每种数据库驱动程序类在静态初始化块(静态代码)中向drivermanager注册自己。静态代码执行的时间是当class调入到内存

18、中就执行(你可以想像成,当类调用到内存后就执行一个方法)。所以没有必要.newinstance(,通过jdbc连接数据库的程序(二,连接数据库:con=drivermanager.getconnection(“jdbc:odbc:access”);其中access为odbc数据源名 执行sql语句,首先创建声明stmt=con.createstatement() stmt.excutequery(sql) stmt.executeupdate(sql) 循环取得结果 while(rs.next() ,将数据库中的各种类型转换为java中的类型(getxxx)方法 关闭数据库、声明、结果集等连接,大家在练习中的错误sql

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论