第5章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
1
计的 角度 来看 , 当项 日经 理 、项 目 长 、软件 开 发工程 师这 些对 象 / 组 /打 印输 出表示职 位的 信息
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实验报告继承、多态、接⼝和异常处理实验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 编程中,多态最常见的应用是基于继承和接口设计。
1. 基于继承的多态实现
在基于继承的多态实现中,子类可以复写父类的方法,实现方法的多态性。
Java 的动态绑定机制能够根据实际调用的方法进行方法调用,实现多态性。
下面是一段基于继承的多态实现代码:
```
public class Animal {
public void move() { System.out.println(\。
java接口的描述

java接口的描述Java接口是一种用于描述类的行为的抽象类型。
它定义了一组方法的签名,但是没有提供方法的具体实现。
接口可以被类实现,从而使类具有接口所定义的行为。
接口是Java语言中实现多态的重要手段之一,它提供了一种规范化的方式来描述类之间的关系和交互。
在Java中,接口使用`interface`关键字来定义。
一个接口可以包含常量、抽象方法和默认方法。
常量是接口内部的静态常量,其值在定义时被初始化,并且不能被修改。
抽象方法是没有具体实现的方法,只有方法的声明,没有方法体。
默认方法是Java 8引入的新特性,它可以在接口中定义具有默认实现的方法。
接口的方法默认是`public`和`abstract`的,所以在定义时可以省略这两个修饰符。
接口的作用主要有三个方面:定义规范、实现多态和解耦合。
首先,接口可以定义一组规范,要求实现类按照这些规范进行实现。
这样可以保证实现类具有相同的行为,提高代码的可维护性和可复用性。
其次,接口可以实现多态,即一个接口的引用可以指向实现该接口的任意类的对象。
这样可以在不修改原有代码的情况下,对类进行扩展和替换,增加程序的灵活性和可扩展性。
最后,接口可以降低类之间的耦合度,使得系统更加灵活和可维护。
通过接口,类之间只关注接口的规范,而不关心具体实现,从而使得类之间的关系更加松散,减少了代码的依赖性,提高了代码的可重用性和可测试性。
在实际开发中,接口的应用非常广泛。
一方面,接口可以用于定义回调函数,实现事件驱动的编程模式。
例如,在GUI编程中,可以定义一个按钮点击的接口,并将实现该接口的对象注册到按钮上,当按钮被点击时,就会调用接口中定义的方法。
另一方面,接口可以用于实现插件化的架构。
例如,在Web开发中,可以定义一个数据访问接口,然后根据不同的数据库选择不同的实现类,从而实现对不同数据库的访问。
此外,接口还可以用于实现适配器模式、工厂模式等设计模式,增加程序的灵活性和可扩展性。
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接口
在上述多态和接口的例子当中我们发现了一个规则:父类对 象或接口可以出现的地方,子类对象都可以出现。这个规则 我们称为 里氏替换原则
第五章 继承与多态

Teacher
Student
Cloneable()接口
• • • • • • • • • • • • • class Circle { public Point point=new Point(1,2); public int[]arrayInt=new int[]{1,2,3,4,5,6}; public double radius=50; public Circle(Point p,int[] array,double radius){ public Circle clone(){}//需要实现 } public class CircleTest { public static void main(String[] args) { Circle c=new Circle(); Circle d=c.clone(); } }
பைடு நூலகம்含的语句
方法的覆写
例子
子类想调用父类被覆写的方法
内部类
• 在类内部也可以定义另一个类。如果类Outer的内部再定 义一个类Inner,则Inner被称为内部类。 • 内部类可声明public和private,对它的访问的限制与 成员方法和变量相同。 • Public class Outer{ • //外部类的成员 • public class Inner{ • //内部类的成员 • } • }
interface Network{ public void browse() ; // 浏览 } class Real implements Network{ public void browse(){ System.out.println("上网浏览信息") ; } }; class Proxy implements Network{ private Network network ; // 代理对象 public Proxy(Network network){ work = network ; } public void check(){ System.out.println("检查用户是否合法。 ") ; } public void browse(){ this.check() ; work.browse() ; // 调用真实的主 题操作 } }; public class ProxyDemo{ public static void main(String args[]){ Network net = null ; net = new Proxy(new Real()) ;// 指定代 理操作 net.browse() ; // 客户只关心上 网浏览一个操作 } };
面向对象程序设计-Java语言05

(2)如果实现某接口的类不是 abstract的抽象类,则在类的定义部 分必须实现接口的所有抽象方法, 即为所有抽象方法定义方法体,而 且方法头部分应该与接口中的定义 完全一致,即有完全相同的返回值 和参数列表。 (3)如果实现某接口的类是 abstract的抽象类,则它可以不实现 该接口所有的方法。
然而在解决实际问题的过程中, 在很多情冴下仅仅依靠单继承不 能将复杂的问题描述清楚。为了 Java程序的类间层次结构更加合 理,更符合实际问题的本质要求, Java语言提供接口来实现多重继 承机制。
1.声明接口,格式如下: [修饰符] interface接口名[extends 父接口名列表]{ 常量数据成员声明 抽象方法声明
(2)接口中定义的数据成员全是 public final static成员,即常量。 (3)接口中没有自身的构造方法, 所有成员方法都是public abstract方法, 即抽象方法。 (4)接口也具有继承性,可以通过 extends关键字声明该接口的父接口。
一个类要实现接口时,即一个类 要调用多个接口时,要注意以下 几点。: (1)在类中,用implements关键字 就可以调用接口。一个类可以调用 多个接口,这时,在implements后 用逗号隔开多个接口的名称。
2.super的使用场合。super表示 的是当前对象的直接父类对象, 是当前对象的直接父类对象的引 用。 super的使用方法有3种:
(1)用来访问直接父类隐藏的数据成 员,其使用形式如下: super.数据成员 (2)用来调用直接父类中被覆盖的成 员方法,其使用形式如下: super.成员方法(参数) (3)用来调用直接父类的构造方法, 其使用形式如下: super(参数)
父类与子类乊间的关系如图所示:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
((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
PeA语言程序设计
5.1.1 接口的作用及语法
❖ 接口的语法
声明格式为
[接口修饰符] interface 接口名称 [extends 父接口 名]{
…//方法的原型声明或静态常量 }
接口的数据成员一定要赋初值,且此值将不 能再更改,允许省略final关键字
接口中的方法必须是“抽象方法”,不能有 方法体,允许省略public及abstract关键字
JAVA语言程序设计
5.1.1 接口的作用及语法——例5_1
❖ 保险公司的例子
具有车辆保险、人员保险、公司保险等多种保险业务, 在对外提供服务方面具有相似性,如都需要计算保险费 (premium)等,因此可声明一个Insurable 接口
在UML图中,实现接口用带有空三角形的虚线表示
<<Interface>> Insurable
它只提供一种形式,并不提供实现 允许创建者规定方法的基本形式:方法名、参数列
表以及返回类型,但不规定方法主体 也可以包含基本数据类型的数据成员,但它们都默
认为static和final
2
JAVA语言程序设计
5.1.1 接口的作用及语法
❖ 接口的作用
是面向对象的一个重要机制 实现多继承,同时免除C++中的多继承那样的复
}
10
JAVA语言程序设计
5.1.2 实现接口——对象转型
❖ 对象可以被转型为其所属类实现的接口类型
getPolicyNumber、calculatePremium是Insurable接口中声 明的方法
getMileage是Car类新添加的方法,Insurable接口中没有声明 此方法
Car jetta = new Car();
}
7
JAVA语言程序设计
5.1.1 接口的作用及语法——例5_2
❖ 声明一个接口Shape2D,可利用它来实现二维的几 何形状类Circle和Rectangle
把计算面积的方法声明在接口里 pi值是常量,把它声明在接口的数据成员里
interface Shape2D{
//声明Shape2D接口
final double pi=3.14;
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
JAVA语言程序设计
第5章 接口与多态
❖ 5.1 接口 ❖ 5.2 塑型 ❖ 5.3 多态的概念 ❖ 5.4 多态的应用 ❖ 5.5 构造方法与多态 ❖ 5.6 内部类 ❖ 5.7 本章小结
1
JAVA语言程序设计
5.1 接口
❖ 接口
与抽象类一样都是定义多个类的共同属性 使抽象的概念更深入了一层,是一个“纯”抽象类,
//数据成员一定要初始化
public abstract double area(); //抽象方法
}
在接口的声明中,允许省略一些关键字,也可声明如下
interface Shape2D{ double pi=3.14; double area();
}
8
JAVA语言程序设计
5.1.2 实现接口
❖ 接口的实现
} ➢ 必须实现接口中的所有方法 ➢ 来自接口的方法必须声明成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 }
接口不能用new运算符直接产生对象,必须利用其 特性设计新的类,再用新类来创建对象
利用接口设计类的过程,称为接口的实现,使用 implements关键字
语法如下
public class 类名称 implements 接口名称 { /* Bodies for the interface methods */ /* Own data and methods. */
Insurable item = (Insurable)jetta; //对象转型为接口类型
item.getPolicyNumber();
item.calculatePremium();
item.getMileage();
// 接口中没有声明此方法,不可以
jetta.getMileage();
// 类中有此方法,可以