Skip to content

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());
    }
}

运行结果

开始训练动物:
汪汪汪!
狗在跑步
训练结束

开始训练动物:
喵喵喵!
猫在跳跃
训练结束

开始训练动物:
汪汪汪!
狗在跑步
训练结束

关键要点

  1. 多态性:方法可以接受任何实现了该接口的对象
  2. 灵活性:同一方法可以处理不同类型的对象
  3. 扩展性:新增实现类时无需修改使用接口的方法
  4. 解耦合:方法不依赖于具体的实现类,只依赖于接口

Copyright ©2025 moweiwei