第5章java接口与多态[1]

合集下载

第5章 Java中的面向对象特性

第5章  Java中的面向对象特性

堆内存 代码区 public class Person { static int id; int age = 20; public static void main(String[] args) {… } } id age
Zhangsan.id
Zhangsan.age lisi.id
lisi.age
例2: 五子棋

面向过程:
1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。

面向对象:
1、黑白双方 --这两方的行为是一模一样的, 2、棋盘系统 --负责绘制画面, 3、规则系统 --负责判定诸如犯规、输赢等。
a product
1.2 ×× 1.728 ×× 1.2
参数传递方式 值传递方式
方式:方法调用时,为形参分配单元,并将实参的值复制到形参
中;调用结束,形参单元被释放,实参单元仍保留并维持原 值 特点: 形参与实参占用不同的内存单元 单向传递
Person zhangSan=new Person(“张三”,18,“男”);
zhangSan
0xabcd
张三 null
name sex age
0 18
栈内存 实体的内存地址
男 0
堆内存
使用new 运算符和类的构造方法为声明 的对象分配内存,如果类中没有构造方法, 系统会调用默认的构造方法,默认的构造方 法是无参数的。
事万物皆对象”。 对象可以看成是静态属性(成员变量)和动态属 性(方法)的封装体。 类是用来创建同一类型的对象的“模板”,在 一个类中定义了该类对象所应具有的成员变量 以及方法。 移J2SDK提供了很多类供编程人员使用,编程 人员也可定义自己的类。

Java语言中多态的概述

Java语言中多态的概述

包括 其他 类似 的方法 ,如 c mp t lme ,d a ) o ue u 0 rw( Vo ,等等 ,都可 应 用 多态来 解决 。因为 这些 方法 都可 以针 对不 同的 几何体 ,进 行运 算 和操作 。即 :形态 不一 、方法 相同 、内容 多样 。 二 、多态 的好处 由上面 的举例 ,可 以知道 多态给 我们带 来 了好处 ,可 以归纳 为
发工 程师 。其代 码如 下 :
ca s Ma a e x e d mp o e ls n g r e tn s E l y

u l J e Sr ge oi n{ p bi Ma gK tn P s o ) c m i i f
/ /构造 方法
spr 项 目经 理 ” u ( e ” ); / /调 用父类的 构造 方法 / 重 写父类 的 wok方法 ,设置项 目经 理的工 作 } 丰 r /
l I
对于 一个 类 中的方 法而 言 ,类中 的这些 方法 需要 有相 同的 方法 名和 输 出雇 员工作 行为信 息 的重 写 是相对 于继 承 中子 类 和 父类之 问的 方法 而言 ,子类 可 以重写
父 类 中的方法 ,子 类 中方法 的返 回值 类型 、方法 名 、参数 个数 以及

eoi n Ps o) i f
/ /构 造 方法
I io = P s in x t n e oi ;  ̄i t o
S s m.u . ̄ln ” 的职位 是 ” p s o ) yt o t e p t (我 l + oi n ; i t

计的 角度 来看 , 当项 日经 理 、项 目 长 、软件 开 发工程 师这 些对 象 / 组 /打 印输 出表示职 位的 信息

Java基本概念:多态

Java基本概念:多态

Java基本概念:多态⼀、简介描述:多态性是⾯向对象编程中的⼀个重要特性,主要是⽤来实现动态联编的。

换句话说,就是程序的最终状态只有在执⾏过程中才被决定,⽽⾮在编译期间就决定了。

这对于⼤型系统来说能提⾼系统的灵活性和扩展性。

多态允许相同类域的不同对象对同⼀消息做出响应。

即同⼀消息可以根据发送对象的不同⽽采⽤多种不同的⾏为⽅式。

多态可以让我们不⽤关⼼某个对象到底是什么具体类型,就可以使⽤该对象的某些⽅法,从⽽实现更加灵活的编程,提⾼系统的可扩展性。

如果对象的编译时类型和运⾏时类型不⼀致,就会造成多态。

存在条件:1. 类之间有继承关系。

2. ⼦类重写⽗类⽅法。

3. ⽗类引⽤指向⼦类对象。

注意:多态是⽅法的多态,属性没有多态性。

⼀个对象的实际类型是确定的,但是可以指向这个对象的引⽤的类型,却是可以是这对象实际类型的任意⽗类型。

⼦类继承⽗类,调⽤⽅法,如果该⽅法在⼦类中没有重写,那么就是调⽤的是⼦类继承⽗类的⽅法,如果重写了,那么调⽤的就是重写之后的⽅法。

'protected'修饰的⽗类⽅法可以被⼦类见到,也可以被⼦类重写,但是它是⽆法被外部所引⽤的,所以没有多态性。

通过⼀个变量调⽤其引⽤的对象的⼀个⽅法,编译器是否能让其编译通过,主要是看该变量类型的类中有没有定义该⽅法,如果有则编译通过,如果没有则编译报错。

⽽不是看这个变量所引⽤的对象中有没有该⽅法。

Java中的⽅法调⽤,是运⾏时动态和对象绑定的,不到运⾏的时候,是不知道到底哪个⽅法被调⽤的。

编写程序时,如果想调⽤运⾏时类型的⽅法,只能进⾏类型转换,不然通不过编译器的检查。

但是如果两个没有关联的类进⾏强制转换,会报类型转换异常:ClassCastException。

⽰例:public class Test {public static void main(String[] args) {/* 编译看左,运⾏看右 */Student student = new Student();/* 变量person是可以指向Person类型或其⼦类型的对象,所以可以指向Student类型对象 */Person person = new Student();/* 变量student能调⽤的⽅法是Student类中有的⽅法(包括继承过来的) */student.say();//Student/* 变量person能调⽤的⽅法是Person类中有的⽅法 */person.say();//Student}}class Person {public void say() {System.out.println("Person");}}class Student extends Person {public void say() {System.out.println("Student");}}⼆、重写、重载、多态的关系1. 重载是编译时多态调⽤重载的⽅法,在编译期间就要确定调⽤的⽅法是谁,如果不能确定则编译报错。

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接⼝和异常处理实验5 继承、多态、接⼝和异常处理⼀、实验⽬的1、掌握Java的类和对象的声明和使⽤⽅法;2、掌握Java的类的继承和实现⽅法;3、掌握多态性在类的继承中的运⽤;4、掌握接⼝的定义与使⽤;5、掌握基本异常的处理机制;6、熟悉try语句与catch语句的搭配使⽤;7、了解有异常处理与没有异常处理的差别;8、多重catch语句的使⽤;9、使⽤Throws声明异常和Throw抛出异常。

⼆、实验环境1、PC微机;2、DOS操作系统或 Windows 操作系统;3、Java sdk程序开发环境、eclipse集成环境。

三、实验内容1. 设计三个类,分别是学⽣类Student,本科⽣类UnderGraduate,研究⽣类Postjgraduate,其中Student类是⼀个抽象类,它包含学⽣的基本信息如姓名、所学课程、课程成绩等,⽽Undergraduate类和Postgraduate类都是Student类的⼦类,这两个类计算课程成绩等级的⽅法有所不同,如下表所⽰。

假设某班级⾥既有研究⽣⼜有本科⽣,编写程序统计出全班学⽣2. 和Mobilephone具体实现,并设计⼀个应⽤程序类来使⽤这些类。

3.要求设计⼀个GUI图形窗⼝程序,该程序让⽤户输⼊⼀个星期中的任意⼀天的数字1-7,然后输出该数字所对应的是星期⼏。

四、实验步骤实验内容⼀1.建⽴package experiment5_1,其最终⽬录结构如下:2.建⽴Student类:package experiment5_1;public abstract class Student {final static int CourseNo = 3;String name;String type;int[] courses;String courseGrade;public Student(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name; courses = new int[CourseNo];courseGrade = "" ;}public abstract void calculateGrade();public String getName( ) {return name;}public String getType( ) {return type ;}public String getCourseGrade( ) {return courseGrade;}public int getCourseScore(int courseNumber) {return courses[courseNumber];}public void setName(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name;}public void setType(String type) {this.type = type;}public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩this.courses[courseNumber] = courseScore ;}}3.建⽴外部类(1)研究⽣类Postjgraduatepackage experiment5_1;public class postgraduate extends Student {public postgraduate(String name) {super(name);type = "研究⽣";}public void calculateGrade() {// TODO Auto-generated method stubint total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += courses[i];};average = total / CourseNo;if (average>=90&&average<100) courseGrade = "优秀"; else if (average>=80&&average<90) courseGrade = "良好"; else if (average>=70&&average<80) courseGrade = "⼀般"; else if (average>=60&&average<70) courseGrade = "及格"; else courseGrade = "不及格";}}(2)本科⽣类UnderGraduatepackage experiment5_1;public class undergraduate extends Student {public undergraduate(String name ) {super(name);type = "本科⽣";}public void calculateGrade() {int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += getCourseScore(i) ;};average = total / CourseNo;if (average>=80&&average<100) courseGrade = "优秀"; else if (average>=70&&average<80) courseGrade = "良好"; else if (average>=60&&average<70) courseGrade = "⼀般"; else if (average>=50&&average<60) courseGrade = "及格"; else courseGrade = "不及格";}}4.编写代码测试函数package experiment5_1;public class polymorphism {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new undergraduate("陈建平");students[1] = new undergraduate("鲁向东");students[2] = new postgraduate("匡晓华");students[3] = new undergraduate("周丽娜");students[4] = new postgraduate("梁欣欣");for (int i=0; i<5 ;i++) {students[i].setCourseScore(0,87);students[i].setCourseScore(1,90);students[i].setCourseScore(2,78);}for (int i=0; i<5 ;i++) {students[i].calculateGrade();}System.out.println("姓名" + " 类型" +" 成绩");System.out.println("-----------------------");for (int i=0; i<5 ;i++) {System.out.println(students[i].getName( )+" "+students[i].getType( )+" "+students[i].getCourseGrade( ));}}}实验内容⼆1.建⽴package experiment5_2,其最终⽬录结构如下:2.写接⼝Soundable代码:package experiment5_2;public interface Soundable {public void increaseV olume( );public void decreaseV olume( );public void stopSound( );public void playSound( );}3.创建三个类Radio、Walkman和Mobilephone具体实现,分别添加代码:// Mobilephone类package experiment5_2;class Mobilephone implements Soundable{public void increaseV olume( ) {System.out.println("增⼤⼿机⾳量");}public void decreaseV olume( ) {System.out.println("减⼩⼿机⾳量");}public void stopSound( ) {System.out.println("关闭⼿机");}public void playSound( ) {System.out.println("⼿机发出来电铃声");}}// Walkman类package experiment5_2;class Walkman implements Soundable { public void increaseV olume( ) { System.out.println("增⼤随声听⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩随声听⾳量"); }public void stopSound( ) {System.out.println("关闭随声听");}public void playSound( ) {System.out.println("随声听发出⾳乐"); }}// Radio类package experiment5_2;class Radio implements Soundable{ public void increaseV olume( ) { System.out.println("增⼤收⾳机⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩收⾳机⾳量"); }public void stopSound( ) {System.out.println("关闭收⾳机");}public void playSound( ) {System.out.println("收⾳机播放⼴播"); }}4.创建people类及编写测试代码://People类package experiment5_2;class People {public void listen(Soundable s) {s.playSound( );}}//测试代码package experiment5_2;import java.util.Scanner;public class InterfaceTest {public static void main(String[] args) {int i;People sportsman = new People( );Scanner scanner = new Scanner(System.in);Soundable[] soundDevice = new Soundable[3];//往声⾳设备数组中放⼊能发声的设备soundDevice[0] = new Radio( );soundDevice[1] = new Walkman( );soundDevice[2] = new Mobilephone();System.out.println("你想听什么? 请输⼊选择:0-收⾳机1-随声听2-⼿机");i = scanner.nextInt( );//开始听声⾳sportsman.listen(soundDevice[i]);soundDevice[i].increaseV olume( );soundDevice[i].stopSound();scanner.close();}}实验内容三1.建⽴package experiment5_3,其最终⽬录结构如下package experiment5_3;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DateTransf extends JFrame implements KeyListener{/****/private static final long serialVersionUID = 1L;private static DateTransf frm;private static JTextField txt;private static JTextField data;DateTransf() {setTitle("数字与星期转换");setLocation(700, 300);setSize(400,130);}public static void main(String[] args) {frm = new DateTransf();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(2,2));txt = new JTextField(12);data = new JTextField(12);JLabel lable1 = new JLabel("输⼊数字:");JLabel lable2 = new JLabel("星期⼏:");frm.add(lable1);txt.addKeyListener(frm);frm.add(txt);frm.add(lable2);frm.add(data);frm.setVisible(true);}public void keyPressed(KeyEvent e) {if (e.getSource() == txt) {if (e.getKeyCode() == KeyEvent.VK_ENTER) // 判断按下的键是否是回车键{try {int number = Integer.parseInt(txt.getText());switch (number) {case 1:data.setText("Mon");break;case 2:data.setText("Tue");break;case 3:data.setText("Wen");break;case 4:data.setText("Thu");break;case 5:data.setText("Fri");break;case 6:data.setText("Sat");break;case 7:data.setText("Sun");break;default:JOptionPane.showMessageDialog(null, "您输⼊的数字不是1~7","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMATION_MESSAGE); break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输⼊的不是整数","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMA TION_MESSAGE); }}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运⾏五、实验结果●实验内容⼀结果:●实验内容⼆结果:●实验内容三结果:六、实验⼩结1.这次实验的内容⽐较多,需要掌握Java的类和对象的声明和使⽤⽅法、Java的类的继承和实现⽅法、多态性在类的继承中的运⽤、接⼝的定义与使⽤、基本异常的处理机制、try语句与catch语句的搭配使⽤等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。

Java高级编程:多态、继承和接口设计的深入理解

Java高级编程:多态、继承和接口设计的深入理解

Java高级编程:多态、继承和接口设计的深入理解
在 Java 编程中,多态、继承和接口是三个十分重要的概念。

它们是 Java 面向对象编程的核心概念,在进行大型软件设计时,设计良好的多态、继承和接口设计能够大大提升软件的可维护性、可扩展性和可重用性。

本文将逐一探讨这三个核心概念,并深入理解它们的设计思想与实现方法。

一、多态
多态是指一个变量、对象或方法能够具有多重形态的能力。

这意味着同一类对象可以通过不同的方式处理,主要是通过运行时实现。

在 Java 编程中,多态最常见的应用是基于继承和接口设计。

1. 基于继承的多态实现
在基于继承的多态实现中,子类可以复写父类的方法,实现方法的多态性。

Java 的动态绑定机制能够根据实际调用的方法进行方法调用,实现多态性。

下面是一段基于继承的多态实现代码:
```
public class Animal {
public void move() { System.out.println(\。

JAVA开发与应用 抽象类与接口及多态

JAVA开发与应用 抽象类与接口及多态

//ok //ok //ok
接口
一个接口可以继承自另一个接口。 Java中不允许类的多继承,但允许接口的 Java中不允许类的多继承,但允许接口的 多继承。
Sofa.java interface Sittable { void sit(); } interface Lie { void sleep(); } interface Chair extends Sittable { } interface Sofa extends Sittable, Lie { }
多态的一个小结: 多态的一个小结:
1. Java中除了static和final方法外,其他所有的方法都是运行时绑 Java中除了 中除了static和final方法外 方法外, 定的。private方法都被隐式指定为 方法都被隐式指定为final的 因此final的方法不会在 定的。private方法都被隐式指定为final的,因此final的方法不会在 运行时绑定。当在派生类中重写基类中static、final、 private方法 运行时绑定。当在派生类中重写基类中static、final、或private方法 实质上是创建了一个新的方法。 时,实质上是创建了一个新的方法。 2.在派生类中,对于基类中的private方法,最好采用不同的名字。 2.在派生类中,对于基类中的private方法 最好采用不同的名字。 方法, 在派生类中 3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只 3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思, 包含抽象方法的类叫做抽象类 要类中包含一个抽象方法,该类就是抽象类。 要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作 为基类的角色,为不同的子类提供通用的接口。 为基类的角色,为不同的子类提供通用的接口。 4.对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对 4.对象清理的顺序和创建的顺序相反, 对象清理的顺序和创建的顺序相反 因为大家都知道Java垃圾回收器 垃圾回收器。 象,因为大家都知道Java垃圾回收器。 5.在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对 5.在基类的构造方法中小心调用基类中被重写的方法, 在基类的构造方法中小心调用基类中被重写的方法 象初始化顺序。 象初始化顺序。 6.构造方法是被隐式声明为static方法。 6.构造方法是被隐式声明为 构造方法是被隐式声明为static方法 方法。 7.用继承表达行为间的差异,用字段表达状态上的变化。 7.用继承表达行为间的差异,用字段表达状态上的变化。 用继承表达行为体的方法,就是抽象方法。 含有抽象方法的类,即为抽象类。 如果一个子类没有实现抽象基类中所有的抽象方 法,则子类也成为一个抽象类。 抽象类中可以没有抽象方法,但是有抽象方法的 类必须是抽象类。 构造方法、静态方法、私有方法、final方法不能 构造方法、静态方法、私有方法、final方法不能 被声明为抽象的方法。

Java程序设计精编教程5-8章知识点

Java程序设计精编教程5-8章知识点

b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。

}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句

Java 接口详细讲解ppt课件

Java 接口详细讲解ppt课件
多态 接口
教学内容
1
多态
多态:同一个引用类型,使用不同的实例而执 行不同操作
(一个**存在多种形态就是多态)
**有两种一个是类(对象),一个是方法; 当然也有人分为编译时多态和运行时多态!!!
2
JAVA是如何实现多态的
方法级别上
方法重载 方法重写
类级别上(对象级别):
接口通过使用关键字interface来声明,格式: interface 接口的名字 2.接口体
接口体中包含常量定义和方法定义两部分。
interface Printable { final int MAX=100; void add(); float sum(float x ,float y);
}
5
接口的使用
继承 接口
接口存在是为了什么?
3
接口
Java不支持多继承性,即一个类只能有一个父类。单继 承性使得Java简单,易于管理和维护。
为了克服Java单继承的缺点,Java使用了接口。
4
接口的声明
使用关键字interface来定义一个接口。接口的定义和类的定 义很相似,分为接口的声明和接口体。 1.接口声明
接口的使用 接口由类去实现以便使用接口中的方法。 一个类可以实现多个接口,类通过使用关键字implements
声明自己实现一个或多个接口。如果实现多个接口,用逗号隔开 接口名。 如A类实现Printable和Addable接口:
class A implements Printable,Addable 再比如Animal的子类Dog类实现Eatable和Sleepable接口
在上述多态和接口的例子当中我们发现了一个规则:父类对 象或接口可以出现的地方,子类对象都可以出现。这个规则 我们称为 里氏替换原则
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Insurable item = (Insurable)jetta; //对象转型为接口类型
item.getPolicyNumber();
item.calculatePremium();
item.getMileage();
// 接口中没有声明此方法,不可以
jetta.getMileage();
// 类中有此方法,可以
6
JAVA语言程序设计
5.1.1 接口的作用及语法——例5_1保险接口的声明
❖ 例5.1中的Insurable 接口声明如下,可见其 中的方法都是抽象方法
public interface Insurable { public int getNumber(); public int getCoverageAmount(); public double calculatePremium(); public Date getExpiryDate();
杂性 建立类和类之间的“协议”
➢ 把类根据其实现的功能来分别代表,而不必顾虑它所 在的类继承层次;这样可以最大限度地利用动态绑定, 隐藏实现细节
➢ 实现不同类之间的常量共享
3
JAVA语言程序设计
5.1.1 接口的作用及语法——与抽象类的不同
❖ 接口允许我们在看起来不相干的对象之间 定义共同行为
4
它只提供一种形式,并不提供实现 允许创建者规定方法的基本形式:方法名、参数列
表以及返回类型,但不规定方法主体 也可以包含基本数据类型的数据成员,但它们都默
认为static和final
2
JAVA语言程序设计
5.1.1 接口的作用及语法
❖ 接口的作用
是面向对象的一个重要机制 实现多继承,同时免除C++中的多继承那样的复
((Car)item).getMileage(); // 转型回原类,可调用此方法了
11
JAVA语言程序设计
5.1.2 实现接口 ——例5_4
声明Circle与Rectangle两个类实现Shape2D接口
class Circle implements Shape2D
{ double radius; public Circle(double r) { radius=r; } public double area() { return (pi * radius * radius); }
Company
Person
Car
5
JAVA语言程序设计
5.1.1 接口的作用及语法
❖ 接口的语法
声明格式为
[接口修饰符] interface 接口名称 [extends 父接口 名]{
…//方法的原型声明或静态常量 }
接口的数据成员一定要赋初值,且此值将不 能再更改,允许省略final关键字
接口中的方法必须是“抽象方法”,不能有 方法体,允许省略public及abstract关键字
接口不能用new运算符直接产生对象,必须利用其 特性设计新的类,再用新类来创建对象
利用接口设计类的过程,称为接口的实现,使用 implements关键字
语法如下
public class 类名称 implements 接口名称 { /* Bodies for the interface methods */ /* Own data and methods. */
JAVA语言程序设计
5.1.1 接口的作用及语法——例5_1
❖ 保险公司的例子
具有车辆保险、人员保险、公司保险等多种保险业务, 在对外提供服务方面具有相似性,如都需要计算保险费 (premium)等,因此可声明一个Insurable 接口
在UML图中,实现接口用带有空三角形的虚线表示
<<Interface>> Insurable
//数据成员一定要初始化
public abstract double area(); //抽象方法
}
在接口的声明中,允许省略一些关键字,也可声明如下
interface Shape2D{ double pi=3.14; double area();
}
8
JAVA语言程序设计
5.1.2 实现接口
❖ 接口的实现
}
7例5_2
❖ 声明一个接口Shape2D,可利用它来实现二维的几 何形状类Circle和Rectangle
把计算面积的方法声明在接口里 pi值是常量,把它声明在接口的数据成员里
interface Shape2D{
//声明Shape2D接口
final double pi=3.14;
}
10
JAVA语言程序设计
5.1.2 实现接口——对象转型
❖ 对象可以被转型为其所属类实现的接口类型
getPolicyNumber、calculatePremium是Insurable接口中声 明的方法
getMileage是Car类新添加的方法,Insurable接口中没有声明 此方法
Car jetta = new Car();
JAVA语言程序设计
第5章 接口与多态
❖ 5.1 接口 ❖ 5.2 塑型 ❖ 5.3 多态的概念 ❖ 5.4 多态的应用 ❖ 5.5 构造方法与多态 ❖ 5.6 内部类 ❖ 5.7 本章小结
1
JAVA语言程序设计
5.1 接口
❖ 接口
与抽象类一样都是定义多个类的共同属性 使抽象的概念更深入了一层,是一个“纯”抽象类,
} ➢ 必须实现接口中的所有方法 ➢ 来自接口的方法必须声明成public
9
JAVA语言程序设计
5.1.2 实现接口 ——例5_3
❖ 实现接口Insurable,声明汽车类实现例5.1中的 Insurable接口,实现接口中的所有抽象方法
public class Car implements Insurable { public int getPolicyNumber() { // write code here } public double calculatePremium() { // write code here } public Date getExpiryDate() { // write code here } public int getCoverageAmount() { // write code here } public int getMileage() { //新添加的方法 //write code here }
相关文档
最新文档