6.1接口
1、接口声明
定义接口是使用关键字:interface 声明接口
2、接口体
(1)接口体中包含常量的声明(没有变量)和抽象方法两部分
(2)接口体中只有抽象方法,没有普通方法,而且接口体中所有的常量的访问权限都是public,而且是static常量(允许省略public、final和static修饰符)
(3)所有抽象发得到访问权限一定是public(允许省略public abstract修饰符)
6.2实现接口
1、类实现接口
(1)接口由类来实现以便使用接口中的方法
(2)一个类需要在类的声明中使用关键字implements声明该类实现一个或多个接口
2、重写接口中的方法
如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法
3、接口的细节说明
(1)如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的常量
(2)接口也可以被继承,即可以通过关键字extends声明一个接口是另一个接口的子接口
6.3接口的UML图
UML通过使用虚线连接类和他所实现的接口,虚线的起始端是类,虚线的终点端是他实现的接口,终点端使用一个空心的三角形表示虚线的结束
6.4接口回调
(1)接口手语引用行变量,接口变量中可以存放实现该接口的类的实例的引用,即存放对象的引用
(2)接口回调是指:可以吧实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法
6.5理解接口
(1)接口可以抽象出重要的行为标准,改行为标准用抽象方法来表示
(2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法
6.6接口与多态
由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式,那么接口变量在回调接口方法时就可能具有多种形态
6.7接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么结论参数就可以回调实现接口的方法
6.8abstract类与接口的比较
abstract类和接口的比较如下:
(1)abstract类和接口都可以有abstract方法
(2)接口中只利用有常量,不能有变量;而abstract类中既可以有变量也可以有常量
(3)abstract类中也可以有非abstract方法,接口不可以
6.9面向接口的编程
所以接口进行的程序设计的核心思想就是接口回调,级接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法
代码编写
abstract class MotorVehicles {
abstract void brake();
}
interface MoneyFare {
void charge();
}
interface ControlTemperature {
void controlAirTemperature();
}
class Bus extends MotorVehicles implements MoneyFare {
void brake() {
System.out.println("公共汽车使用毂式刹车技术");
}
public void charge() {
System.out.println("公共汽车:一元/张,不计算公里数");
}
}
class Taxi extends MotorVehicles implements MoneyFare,ControlTemperature {
void brake() {
System.out.println("出租车使用盘式刹车技术");
}
public void charge() {
System.out.println("出租车:2元/公里,起价3公里");
}
public void controlAirTemperature() {
System.out.println("出租车安装了Hair空调");
}
}
class Cinema implements MoneyFare,ControlTemperature {
public void charge() {
System.out.println("电影院:门票,十元/张");
}
public void controlAirTemperature() {
System.out.println("电影院安装了中央空调");
}
}
public class Example6_3 {
public static void main(String args[]) {
Bus bus101 = new Bus();
Taxi buleTaxi = new Taxi();
Cinema redStarCinema = new Cinema();
MoneyFare fare;
ControlTemperature temperature;
fare = bus101;
bus101.brake();
fare.charge();
fare = buleTaxi;
temperature = buleTaxi;
buleTaxi.brake();
fare.charge();
temperature.controlAirTemperature();
fare = redStarCinema;
temperature = redStarCinema;
fare.charge();
temperature.controlAirTemperature();
}
}
教材中遇到的问题
无
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 100/400 | 1/7 | 10/48 | 接口的使用 |