1. 接口的概述
以猫狗案例举栗子。我们想想狗一般就是看门,猫一般就是作为宠物了。但是,现在有很多的驯养员可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的。所以,这些额外的动作定义到动物父类中就不合适,也不适合直接定义到猫或狗的子类中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被训练,只需要这部分猫狗把这些额外功能实现即可。
2. 接口的好处:通用性,隔离性
3. 接口的基本定义格式:
public interface 接口名称{
//...
}
接口当中可以包含的组成部分有:
- 抽象方法(核心)
- 常量
- 默认方法(Java 8)
- 静态方法(Java 8)
- 私有方法(Java 9)
4. 如何定义一个抽象方法:
public abstract 返回值类型 方法名称(参数类型 参数名称);
注意:
- 接口中的抽象方法,修饰符可以省略不写,默认就是:
public abstract
- 接口中的抽象方法,修饰符如果写:可以省略
public
或abstract
- 抽象方法只有方法头,不能有方法体大括号。
举例如下:
public interface Animal {
public abstract void eat();
public void play();
abstract void fight();
void sleep();
}
5. 定义实现类格式:
public class 实现类名称 implements 接口名称{
// 一定要覆盖重写所有的抽象方法
}
什么是覆盖重写(Override)抽象方法?
- 将接口当中的抽象方法抄写过来
- 去掉 abstract 关键字(public 不可以去掉!!!)
- 写上大括号方法体
举例如下:
public class Cat implements Animal {
public void eat() {
System.out.println("猫吃饭");
}
public void play() {
System.out.println("猫玩耍");
}
public void fight() {
System.out.println("猫打架");
}
public void sleep() {
System.out.println("猫睡觉。");
}
public void catchMouse() {
System.out.println("猫抓老鼠");
}
}
6. 如何使用接口与实现类
创建:
接口名称 引用名 = new 实现类名称();
调用:
引用名.抽象方法名(参数);
注意:
- 左边是接口类型,那么只能调用接口当中定义好的内容,不能调用右侧实现类当中特有的内容。(接口隔离)
- 调用的时候看左边,运行的时候看右边。
网友评论