public interface Animal {
void makeSound();
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow!");
}
}
public class AnimalCare {
// 接口作为入参
public void takeCare(Animal animal) {
animal.makeSound(); // 调用Animal接口的makeSound方法
}
// 接口作为出参
public Animal getAnimal(String type) {
if ("dog".equals(type)) {
return new Dog(); // 返回Dog对象,它实现了Animal接口
} else if ("cat".equals(type)) {
return new Cat(); // 返回Cat对象,它实现了Animal接口
}
return null;
}
}
public class Main {
public static void main(String[] args) {
AnimalCare animalCare = new AnimalCare();
// 使用接口作为出参获取Animal对象
Animal dog = animalCare.getAnimal("dog");
Animal cat = animalCare.getAnimal("cat");
// 使用接口作为入参传递Animal对象
animalCare.takeCare(dog); // 输出: Woof!
animalCare.takeCare(cat); // 输出: Meow!
}
}
例子中,Animal
是一个接口,它定义了一个方法 makeSound()
。Dog
和 Cat
类分别实现了 Animal
接口,并提供了 makeSound()
方法的具体实现。
AnimalCare
类有两个方法:takeCare()
和 getAnimal()
。takeCare()
方法接受一个 Animal
类型的参数,意味着它可以接受任何实现了 Animal
接口的对象。getAnimal()
方法返回一个 Animal
类型的对象,意味着它可以返回任何实现了 Animal
接口的对象的实例。
在 Main
类的 main
方法中,通过 getAnimal()
方法获取 Animal
类型的对象,并将这些对象作为参数传递给 takeCare()
方法。展示了接口如何作为方法的入参和出参,提供了灵活性和解耦合的代码设计。