当前位置:文档之家› Java语言程序设计实用教程第六讲接口与内部类

Java语言程序设计实用教程第六讲接口与内部类


上网记录表record
– recordID(记录表示号):主键 – logtime(登陆时间) – logouttime(退出时间) – timecount(所用时间) – memberID(会员编号):外键
Java语言程序 设计实用教程 SISE
JDBC概述
ODBC存在一些缺点:不容易使用,没有面向对象的特性。 JDBC(Java DataBase Connection) ,Java数据库连接。 Sun公司在1996年提出的一项技术,提供Java程序与数据库 系统通信的API,主要用于进行Java数据库程序开发。 有了JDBC API,不必为访问Sybase、Oracle数据库分别编 写一个专门的程序,只需用JDBC API写一个程序就够了, 它可做三件事情: – 与数据库建立连接 – 发送SQL语句 – 处理结果
另外,如果想为每一个几何形状的类设计一个area() 方法,用 另外,如果想为每一个几何形状的类设计一个area() 方法, 来显示几何形状的面积, 来显示几何形状的面积,因每种几何形状的面积计算方式并不 相同,所以把area() 方法的处理方式设计在父类里并不恰当, 相同,所以把area() 方法的处理方式设计在父类里并不恰当, 但每一个由CShape CShape父类所派生出的子类又都需要用到这一个方 但每一个由CShape父类所派生出的子类又都需要用到这一个方 因此可以在父类里只声明area() 方法,而把area() 法,因此可以在父类里只声明area() 方法,而把area() 方法 处理的方法留在子类里来定义,也就是说, 处理的方法留在子类里来定义,也就是说,把area() 声明成抽 象方法即可解决这个问题。根据上述的概念, 象方法即可解决这个问题。根据上述的概念,可编写出如下的 父类程序代码: 父类程序代码:
特点: : 1、接口的访问控制修饰符只有public。 2、接口类型也可以继承,并且可以多重继承,使用extends。但它与类中 。 的extends不同,它可以有多个父接口,各父接口间用逗号隔开 3、java的类层次结构中有一个顶级类Ojbect ,接口没有 4、接口体内只能声明常量字段和抽象方法:接口中的所有常量必须是 public static final,方法必须是public abstract,这是系统默认的,不管你 在定义接口时,写不写修饰符都是一样的
Java语言程序 设计实用教程 SISE
接口的实现
<访问控制修饰符 修饰符 访问控制修饰符><修饰符 类名[extends 父类名 父类名] 访问控制修饰符 修饰符>class 类名 implements 接口名表 接口名表{ 类体 }
1、实现接口可以是某个类的子类,也可以是父类。 2、一个类可以“实现”多个接口功能,从而实现多继承 多继承, 多继承 关键词implements用于表示一个类实现若干接口,接口名之 间用逗号隔开。 3、“继承”后的类可以抽象类也可以是普通类,若实现接 口的类不是抽象类,则必须实现所有接口的所有方法,即为 所有的抽象方法定义方法体 4、类中实现方法时,必须使用与该抽象方法完全一样的名 字、返回类型和参数表,否则,就构成重载了,(见例6-3, P105)
Java语言程序 设计实用教程 SISE
6.2 内部类
Java语言程序 设计实用教程 SISE
内部类
在一个类(称为”外部类” 里定义另一个类 在一个类(称为”外部类”)里定义另一个类是完 全可以的,这称为“内部类”。使用内部类可以非常 “内部类” 方便地编写事件驱动程序,例如图形用户界面程序 编写事件驱动程序, 编写事件驱动程序 内部类是一种非常有价值的特性,它能让你在逻辑上 将相互从属的类组织起来,并且在类的内部控制访问 权限。 内部类作为外部类的成员之一,可以直接访问外部类 的其他成员 外部类在其方法中,通过实例化内部类的一个对象才 能访问内部类的成员。
接口的定义
[public] interface 接口名 extends 父接口名列表 父接口名列表{ //声明常量字段 声明常量字段 [public][static][final]<类型 数据成员名 常量值 类型> 常量值; 类型 数据成员名=常量值 //声明抽象方法 声明抽象方法 [public][abstract]<返回类型 方法名 参数表 返回类型>方法名 参数表); 返回类型 方法名(参数表 }
Java语言程序 设计实用教程 SISE
6.3 项目案例
Java语言程序 设计实用教程 SISE
会员管理系统登陆模块
网吧会员的上网注册、下网注销 可以计算上网的时间,据此结算上网费用,从 预存金额中扣除
Java语言程序 设计实用教程 SISE
数据库设计
会员信息表memberTable
– memberID(会员编号):主键 – password(密码) – membername(会员名称) – IDcardnum(会员卡号) – leftmoney(预存余额) – integral(积分)
Java语言程序 设计实用教程 SISE
匿名内部类
匿名内部类就是没有名字的内部类 如果满足下面的一些条件,使用匿名内部类是比较 合适的:
只用到类的一个实例 类在定义后马上用到 类非常小(SUN推荐是在4行代码以下) 给类命名并不会导致你的代码更容易被理解
一个匿名内部类一定是在new的后面,用其隐含实 现一个接口或实现一个类(P111,例6-5)
CRectangle类
CCircle 类
CTriangle 类
Java语言程序 设计实用教程 SISE
需求假设
假设这些几何形状均具有“颜色”(color)这个属性, 假设这些几何形状均具有“颜色”(color)这个属性,因此可以 这个属性 color这个数据成员 以及赋值color的方法均设计在父类里, 这个数据成员, color的方法均设计在父类里 把color这个数据成员,以及赋值color的方法均设计在父类里, 让它继承给各个形状的子类较为方便, 让它继承给各个形状的子类较为方便,如此就不用在每一个几 何形状的子类里,设计相同的程序代码来处理“颜色” 何形状的子类里,设计相同的程序代码来处理“颜色”这个属 性的问题。 性的问题。
Java语言程序 设计实用教程 SISE
抽象类CShape派生的子类 派生的子类CRectangle 抽象类 派生的子类
class CRectangle extends CShape { int 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); } }
Java语言程序 设计实用教程 SISE
应用
app10Public 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(); } }
Java语言程序 设计实用教程 SISE
Java语言程序设计实用教程
Java语言程序 设计实用教程 SISE
第六讲 接口与内部类
Java语言程序 设计实用教程 SISE
本章学习要点:
理解抽象类与接口 理解内部类及其应用 利用接口提供Java中多重继承的性质
3
Java语言程序 设计实用教程 SISE
Java语言程序 设计实用教程 SISE
抽象类实现的例子
如前所述你可能对抽象类的概念有点模糊,下面举 一个具体实例来作说明。 假设想设计一个形状(shape)的父类CShape,由此类 可派生出圆形(circle),长方形(rectangle)于三角 形(triangle)等几何形状的类。则父类于子类的派 生关系描绘成如下图所示。 CShape类
Java语言程序 设计实用教程 SISE
定义抽象类 CShape
abstract class CShape //定义抽象类 //定义抽象类 { //数据成员 protected String color; //数据成员 public void setColor(String str) { color=str; //一般的方法,用来赋值几何形状的颜色 //一般的方法, 一般的方法 } ();//抽象类内的抽象方法 abstract void area();//抽象类内的抽象方法 ();// }
Java语言程序 设计实用教程 SISE
内部类的使用
在方法和作用域里的内部类 内部类可以被创建在方法内部,甚至是任意一个作用域里。 两个理由: 1、多重继承:无论外部类是否已经继承了某个接口的实现, 对于内部类都没有影响。如果没有内部类提供的可以继承 多个具体的或抽象的类的能力,一些设计与编程问题就很 难解决。从这个角度看,内部类使得多重继承的解决方案 变得完整。(见P109,例6-4) 2、你要处理一个复杂的问题,需要一个类,但是又不想让 大家知道这个类
Java语言程序 设计实用教程 SISE
抽象类CShape派生的子类 抽象类 派生的子类CCricle 派生的子类
class CCircle extends CShape CShape { double radius; //数据成员 public CCircle(double r) //构造函数 { radius=r; } 在此处明确定义 public void area() area()的处理方法 { System.out.print(“Color=“+color+”,”); System.out.print(“area=“+3.14*radius*radius); } }
相关主题