31.方法形参是接口类型
问题:调用方法时,方法的形参是接口,应该传入的是什么?
回答:需要传入接口的实现类对象,以多态的形式接收这个参数。
复盘:调用这个方法 1. 编写实现类,实现接口 2. 重写方法 3. 创建实现类对象,将对象作为参数传入
代码示例
定义接口
java
// 定义一个动物接口
public interface Animal {
void makeSound();
void move();
}实现接口
java
// 狗类实现动物接口
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪!");
}
@Override
public void move() {
System.out.println("狗在跑步");
}
}
// 猫类实现动物接口
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵!");
}
@Override
public void move() {
System.out.println("猫在跳跃");
}
}使用接口作为方法参数
java
public class AnimalTrainer {
// 方法的形参是接口类型
public void trainAnimal(Animal animal) {
System.out.println("开始训练动物:");
animal.makeSound(); // 调用接口方法
animal.move(); // 调用接口方法
System.out.println("训练结束\n");
}
public static void main(String[] args) {
AnimalTrainer trainer = new AnimalTrainer();
// 传入Dog对象
Dog dog = new Dog();
trainer.trainAnimal(dog);
// 传入Cat对象
Cat cat = new Cat();
trainer.trainAnimal(cat);
// 也可以使用匿名对象
trainer.trainAnimal(new Dog());
}
}运行结果
开始训练动物:
汪汪汪!
狗在跑步
训练结束
开始训练动物:
喵喵喵!
猫在跳跃
训练结束
开始训练动物:
汪汪汪!
狗在跑步
训练结束关键要点
- 多态性:方法可以接受任何实现了该接口的对象
- 灵活性:同一方法可以处理不同类型的对象
- 扩展性:新增实现类时无需修改使用接口的方法
- 解耦合:方法不依赖于具体的实现类,只依赖于接口