PAGE5
《面向对象程序设计》教案
第21讲
教学对象
计算机科学技术专业
授课内容
8.1接口
8.2接口方法
课程标准
教学目标
(一)知识目标
1.了解接口的作用
2.掌握接口的定义、实现、继承以及接口常量
3.了解接口的各种方法,包括私有方法、默认方法、静态方法
(二)能力目标
能够熟练使用抽象类及接口解决实际问题
教学方法
采用讲授法、演示法、讨论法、案例教学。
学时及分配(第1学时50分钟)
课堂讲授30分钟
课堂练习20分钟
8.1.1接口的定义
8.1.2接口的实现
8.1.3接口的继承
8.1.4接口类型的使用
8.1.5常量
学时及分配(第2学时50分钟)
课堂讲授30分钟
课堂练习20分钟
8.2.1默认方法
8.2.2私有方法
8.2.3静态方法
8.2.4关于接口与抽象类
知识点分析
重点:
1.接口的定义及使用
2.接口的实现
难点:
接口的继承、类继承及接口实现
教学过程设计
内容
方式
问题导入:
Java语言中所有的类都处于一个类层次结构中,除Object类以外,所有的类都只有一个直接父类,即子类与父类之间是单继承的关系,而不允许多重继承。
而现实问题类之间的继承关系往往是多继承的关系,为了实现多重继承,Java语言通过接口使得处于不同层次、甚至互不相关的类具有相同的行为。
内容要点
8.1.1接口定义
接口(interface)定义了一种可以被类层次中的任何类实现的行为的协议。在Java8之前,接口中只能定义常量和抽象方法,从Java8开始,接口中还可以定义默认方法、静态方法和私有方法。接口主要为实现类提供一种操作契约,接口可以用来实现多重继承。
接口的定义与类的定义类似,包括接口声明和接口体两部分。接口声明使用interface关键字,格式如下:
[public]interface接口名[extends超接口]{
//接口体
}
【案例8-1】一个简单的接口Eatable(可吃的)。
接口中的抽象方法只有声明,没有实现。抽象方法也可以省略public、abstract修饰符,省略修饰符编译器自动加上。
在UML中,接口的表示与类图类似,图8-1是Eatable接口的UML图,其中接口名上方使用interface表示接口,接口名和抽象方法名使用斜体表示。
8.1.2接口的实现
实现接口就是实现接口中定义的抽象方法,这需要在类声明中用implements子句来表示实现接口,一般格式如下:
[public]class类名implements接口列表{
//类体定义
}
一个类可以实现多个接口,这需要在implements子句中指定要实现的接口并用逗号分隔。在这种情况下如果把接口理解成特殊的类,那么这个类利用接口实际上实现了多继承。
如果实现接口的类不是abstract类,则在类的定义部分必须实现接口中的所有抽象方法,即必须保证非abstract类中不能存在abstract方法。
【案例8-2】定义Mutton类实现Eatable接口。
由于Mutton类不是抽象类,它必须实现Eatable接口中的howToEat()方法。为了保证实现的方法是接口中定义的方法,也应该使用@Override注解。
8.1.3接口的继承
一个接口可以继承一个或多个接口。与类的继承类似,子接口继承父接口中的常量、抽象方法、默认方法。定义接口的继承仍使用extends关键字,一般格式如下:
[public]interface接口名extends接口列表{
//接口体定义
}
接口的继承是子接口继承父接口中的抽象方法和默认方法。与类的继承不同,一个接口可以继承多个父接口。
【案例9-3】定义AA接口和BB接口,然后定义CC接口继承了AA接口和BB接口。
【程序9-3】CC.java
上述AA、BB、CC接口与DD类之间的关系如图8-3所示,图中虚线表示接口实现。可以看到,接口允许多继承,而类的继承只能是单继承。
一个类实现多个接口就要实现每个接口中的抽象方法。接口中的常量和默认方法都被实现类继承,但接口中的静态方法不被继承。
8.1.4接口类型的使用
接口也是一种引用类型,任何实现该接口的实例都可以存储在该接口类型的变量中。当通过接口对象调用某个方法时,Java运行时系统确定该调用哪个类中的方法。
9.1.5常量
定义在接口中的任何变量都自动加上public、final、static属性,因此它们都是常量,常量的定义可以省略