JAVA中抽象类和接口_第1页
JAVA中抽象类和接口_第2页
JAVA中抽象类和接口_第3页
JAVA中抽象类和接口_第4页
JAVA中抽象类和接口_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章第四章II OODII OOD 抽象类和接口抽象类和接口涉及到课本的章节涉及到课本的章节: 第第3章章 OO的核心特性的核心特性 第第4章章 接口接口OOD 软件产品的产生过程(瀑布模型)软件产品的产生过程(瀑布模型)数据类型数据类型: 二者都是引用数据类型二者都是引用数据类型.语言规范语言规范: (1)二者都是用来完成抽象定义的二者都是用来完成抽象定义的.接口是一种接口是一种特殊特殊的的抽象类抽象类 (2)二者都是用来定义一种二者都是用来定义一种规范规范 (3)二者都涉及到二者都涉及到OOD(Design)为什么将二者放在一起介绍为什么将二者放在一起介绍?第四章第四章II 抽象类和接口

2、抽象类和接口 1. 1. 抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例第四章第四章II 抽象类和接口抽象类和接口 1. 1. 抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例1. 抽象类抽象类 抽象类抽象类: -本身不能被实例化对象本身不能被实例化对象,只能作为其它类

3、的只能作为其它类的超类超类 -使用使用abstract修饰修饰 定义定义: abstract class 类名类名 属性定义;属性定义; 方法方法定义;定义;=抽象方法抽象方法非抽象方法非抽象方法 引出引出:抽象方法定义抽象方法定义 abstract 返回类型返回类型 方法名方法名();抽象类定义抽象类定义:abstract class Figure private String shape; /属性定义属性定义 Figure(String shape) /构造方法定义构造方法定义 this.shape=shape; public abstract double area(); /抽象方法定义

4、抽象方法定义 public void print() /实例方法定义实例方法定义 System.out.println(this.area(); 抽象类抽象类定义规范定义规范: 1含有抽象方法的类含有抽象方法的类必须必须被定义成抽象类被定义成抽象类 2抽象类中抽象类中不不一定要有抽象方法一定要有抽象方法 3构造方法不能用构造方法不能用abstract抽象类抽象类作用作用: -被子类继承被子类继承 抽象类抽象类继承规范继承规范: 1抽象类被子类抽象类被子类继承继承,必须必须具体实现具体实现抽象方法抽象方法 2子类必须实现抽象父类的子类必须实现抽象父类的所有所有抽象方法抽象方法抽象类举例:抽象类举

5、例: 问题描述:问题描述: 现需要设计一个图形类现需要设计一个图形类Figure,对不同的,对不同的图形图形(三角形,圆形等三角形,圆形等)求面积能提供一个统求面积能提供一个统一的规范一的规范问题解决问题解决: 将将Figure类定义成抽象类类定义成抽象类; 将求面积定义成一个抽象方法。将求面积定义成一个抽象方法。类图类图abstract class Figure abstract double area(); public void print().输出面积输出面积. class Circle extends Figure double area() . class Triangle ext

6、ends Figure double area() . 抽象类举例抽象类举例: abstract class Figure private String shape; public Figure(String shape) this.shape=shape; public abstract double area(); public void print() System.out.println(this.shape+”面积为面积为:”+this.area(); class Circle extends Figure double r; Circle(double r) super(“圆形圆形

7、”); this.r=r; public double area() return(3.14*r*r); class Triangle extends Figure double sideA,sideB,sideC; boolean boo; Triangle(double a,double b,double c) super(“三角形三角形”); sideA=a; sideB=b; sideC=c; if(a+bc&a+cb&c+ba) System.out.println(我是一个三角形我是一个三角形); boo=true; else System.out.println(

8、我不是一个三角形我不是一个三角形); boo=false; return bool; public double area() if(boo) double p=(sideA+sideB+sideC)/2.0; double area=Math.sqrt(p*(p-sideA)*(p- sideB)*(p-sideC) ; return area; else System.out.println(“不是一个三角形不是一个三角形,不不能计能计 算面积算面积); return 0; return 0; /end of class Triangle class AbstractDemo public

9、 static void main(String args) Circle mycircle=new Circle(2); mycircle.print(); Triangle mytriangle=new Triangle(3,4,5); mytriangle.print(); 抽象类抽象类意义意义: 抽象类的抽象方法约定了抽象类的抽象方法约定了多个子类多个子类共用的共用的方法声明方法声明. 不同的子类可以有不同的子类可以有不同不同的抽象方法实现的抽象方法实现,这这样体现了样体现了OO的多态性的多态性. 可以使子类都在同一个规范约束下可以使子类都在同一个规范约束下.第四章第四章II 抽象类和

10、接口抽象类和接口 1. 1. 抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例(1)接口的定义接口的定义A 接口接口: Java interface 类中类中所有所有的成员方法的成员方法都是都是抽象的抽象的; 接口接口由由实现实现该接口的类来提供方法的具体该接口的类来提供方法的具体实现实现。B: Java接口组成接口组成 一个一个Java接口接口是由一组是由一组常量常量和不能执和不能执行的行的抽象方法抽象方法定义组成。定义组成。C

11、接口的定义接口的定义: public interface 接口名接口名extends 父接口父接口 publicstaticfinal类型类型 最终变量名最终变量名=value; /常量名常量名 ; publicabstract返回类型返回类型 方法名方法名(参数表参数表); /抽象抽象方法说明方法说明; ; 注注: 常量定义中可以省略修饰符常量定义中可以省略修饰符 (为了清晰或者可读性,可以加上修饰符为了清晰或者可读性,可以加上修饰符) 抽象方法说明可以一般抽象方法说明可以一般省略省略abstract,而而加上加上public修饰符。修饰符。 因为接口中没有抽象的概念因为接口中没有抽象的概念

12、D 举例:定义接口举例:定义接口Sellable.java-可出售产品的接口可出售产品的接口 public interface Sellable String getDescription(); String getUnits(); double getPriceUnit(); double getWeight(); 注:注:一个一个.java的文件最多只能有一个的文件最多只能有一个public的类或者接口;的类或者接口; 当存在当存在public的类或者接口时,文件名必须与这个类或者接口同名的类或者接口时,文件名必须与这个类或者接口同名第四章第四章II 抽象类和接口抽象类和接口 1. 1.

13、抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例2.实现接口实现接口 接口中的方法由接口中的方法由类类来实现来实现. 语法语法: 修饰符修饰符 class 类名类名 extends 父类名父类名 implements 接口接口1 ,接口,接口2 一个类可以实现多个接口一个类可以实现多个接口 注:注: java只提供类的单继承,但是可以通过接口来实现只提供类的单继承,但是可以通过接口来实现多个多个接口。接口。 如果一个类实现一个接口,

14、则必须实现接口中的如果一个类实现一个接口,则必须实现接口中的所有所有方法且方法且方法必须声明为方法必须声明为public的的举例:接口的实现举例:接口的实现 JavaBook.java-编程语言书类编程语言书类 public class JavaBook implements Sellable public String getDescription() return “Java Book”; public String getUnits() return “Each”; public double getPriceUnit() return 39.95; public double getW

15、eight() return 4.5; 第四章第四章II 抽象类和接口抽象类和接口 1. 1. 抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例3.接口的继承接口的继承interface A int AA=1; void showa( );interface B extends A int BB=2; void showb( );interface C extends B int CC=3; void showc( );interf

16、ace D extends C int DD=4; void showd( ); class E implements D int e=5; public void showa( )System.out.println(“a=“+a); public void showb( )System.out.println(“b=“+b); public void showc( )System.out.println(“c=“+c); public void showd( )System.out.println(“d=“+d); public void showe( )System.out.printl

17、n(“e=“+e);class Interface_H_C public static void main(String args ) E ee=new E( ); ee.showa( ); ee.showb( ); ee.showc( ); ee.showd( ); ee.showe( ); 第四章第四章II 抽象类和接口抽象类和接口 1. 1. 抽象类抽象类 (1) (1) 抽象类定义抽象类定义 2. 2. 接口接口 (1) (1) 接口定义接口定义 (2) (2) 实现接口实现接口 (3) (3) 接口继承接口继承 3. 3. 现实应用举例现实应用举例(1)二者区别二者区别 相同点相同点

18、都包含抽象方法都包含抽象方法都不能被实例化都不能被实例化 约定约定: 抽象类抽象类 约定了约定了多个子类多个子类共同使用的方法共同使用的方法. 接口接口 约定了约定了多个互不相关的类多个互不相关的类之间共同使用的方法之间共同使用的方法 继承性继承性: 抽象类与子类之间采用抽象类与子类之间采用单单继承机制继承机制 一个类实现多个接口则可以实现一个类实现多个接口则可以实现多重多重继承继承 结构结构: 抽象类中可以包含非抽象方法抽象类中可以包含非抽象方法,也也可以可以声明构造方法声明构造方法. 接口中的方法全是抽象方法接口中的方法全是抽象方法,不能不能声明构造方法声明构造方法 访问权限访问权限: 抽

19、象类具有和普通类一样的访问权限抽象类具有和普通类一样的访问权限 接口和类也是一样的访问权限接口和类也是一样的访问权限,但是成员只能是但是成员只能是public权限权限 成员变量成员变量: 抽象类中可以声明抽象类中可以声明成员变量成员变量,子类可以对该成员变量赋值子类可以对该成员变量赋值 接口只能是接口只能是常量常量 不同点不同点(2)应用举例应用举例:-1 接口接口or抽象类抽象类 应用描述应用描述: 针对某个公司销售部门软件针对某个公司销售部门软件设计设计中有一个中有一个”发动机发动机”实体实体. 最初需求最初需求销售部门只对销售部门只对”发动机发动机”的马力的马力感兴趣感兴趣(1)抽象类定

20、义抽象类定义: 关注行为关注行为:发动机马力发动机马力 定义行为定义行为1获得发动机马力获得发动机马力 public abstract class Motor public abstract int getHorsepower(); 导出实例导出实例: class MotorA extends Motor class MotorB extends Motor需求扩展需求扩展-1: 软件交软件交(1.0Version)付后出现了电池发动机付后出现了电池发动机. 关注行为关注行为:电池充电时间电池充电时间 定义行为定义行为2: public abstract class BatteryPowere

21、dMotor extends Motor public abstract int getTimeToRecharge(); 导出实例导出实例: class BatterpowerA extends BatteryPoweredMotor需求扩展需求扩展-2: 软件交软件交(2.0Version)付后出现了光驱动发动机付后出现了光驱动发动机. 关注行为关注行为:可以供光驱动发动机的最小流明可以供光驱动发动机的最小流明 定义行为定义行为3: public abstract SolarPoweredMotor extends Motor public abstract int getLumensTo

22、Operate(); 导出实例导出实例: class SolarpowerA extends SolarPoweredMotor类图类图abstract class Motor abstract public int getHorsepower(); public abstract BatteryPoweredMotor extends Motor public abstract int getTimeToRecharge(); public abstract SolarPoweredMotor extends Motor public abstract int getLumensToOper

23、ate(); 需求扩展需求扩展-3: 软件交软件交(3.0Version)付后出现了光电双驱动发付后出现了光电双驱动发动机动机. 定义行为定义行为4: public abstract class DualPoweredMotor extends SolarPoweredMotor , BatteryPoweredMotor . 问题问题: 由于由于Java不支持多重继承不支持多重继承,故使用抽象类无法满足需求故使用抽象类无法满足需求.(2)接口定义接口定义: 定义行为定义行为1:-定义发动机定义发动机 public interface Motor public int getHorsepowe

24、r(); (2)接口定义接口定义: 定义行为定义行为2:-电池驱动电池驱动 public interface BatteryPoweredMotor extends Motor public int getTimeToRecharge(); (2)接口定义接口定义: 定义行为定义行为3:-光驱动光驱动 public interface SolarPoweredMotor extends Motor public int getLumensToOperate (); (2)接口定义接口定义: 定义行为定义行为4:-光电驱动光电驱动 public abstract class DualPowere

25、dMotor implements SolarPoweredMotor, BatteryPoweredMotor 类图类图:使用总结使用总结:结合二者的优点结合二者的优点,设计中设计中(Adapter 设计模式设计模式) 使用接口来定义类型使用接口来定义类型定义共同的行为定义共同的行为 定义抽象类实现接口定义抽象类实现接口(可以完成相关属性定义可以完成相关属性定义) 其他类可以选择继承抽象类或者实现其他类可以选择继承抽象类或者实现(1)中定义的接口中定义的接口(1) 所以所以:在在OOD中中,选择接口位于设计的最顶层选择接口位于设计的最顶层.Adapter 设计模式的设计模式的Java应用应用

26、 javax.swing的的GUI事件处理中有具体的事件处理中有具体的Adapter设计模式的应用设计模式的应用(2)应用举例应用举例:-1 续续 应用描述应用描述: 现需要实现一个基于现需要实现一个基于B/S的学生成绩管理系统的学生成绩管理系统 可以使用系统的用户是可以使用系统的用户是: (1)学生学生通过前台网页来查询成绩通过前台网页来查询成绩 (2)教师教师通过前台网页来管理成绩通过前台网页来管理成绩 .具体描述具体描述: 学生属性学生属性:用户名用户名,密码密码,姓名姓名,登陆时间登陆时间,所在班级所在班级 涉及操作涉及操作: 获得用户名获得用户名,设置密码设置密码,获得姓名获得姓名,

27、设置设置姓名姓名,获得登陆时间获得登陆时间,获得所在班级获得所在班级 教师属性教师属性:用户名用户名,密码密码,姓名姓名,登陆时间登陆时间,课程课程 涉及操作涉及操作: 获得用户名获得用户名,设置密码设置密码,获得姓名获得姓名,设置姓设置姓名名,获得登陆时间获得登陆时间,获得课程号获得课程号要求要求: 请根据接口和抽象类的相关内容请根据接口和抽象类的相关内容,按照按照OO的的思想思想,完成此需求的设计完成此需求的设计.(2)应用举例应用举例:-2 简单工厂简单工厂(静态工厂静态工厂)设计模式设计模式 应用描述应用描述:A 小小馅饼店成立于小小馅饼店成立于1998年,成立年,成立10年已经在全国各地年已经在全国各地市建立了市建立了200家连锁店。向市民提供牛肉馅饼,猪肉馅饼,家连锁店。向市民提供牛肉馅饼,猪肉馅饼,三鲜馅饼,芸豆猪肉馅饼等。三鲜馅饼,芸豆猪肉馅饼等。 公司不断开发新业务,定期会向市民提供新口味的馅饼公司不断开发新业务,定期会向市民提供新口味的馅饼产品。产品。(2)应用举例应用举例:-2 简单工厂设计模式简单工厂设计模式 应用描述应用描述:B 小小馅饼店的小小馅饼店的所有所有馅饼基本的工作流程可以描述为:馅饼基本的工作流程可以描述为: 准备阶段和面,擀揉面皮,准备阶段和面,擀揉面皮, 包馅阶段加上各种不同的馅,及其调

温馨提示

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

最新文档

评论

0/150

提交评论