Java接口的实用性
示例
在许多情况下,接口都可能非常有用。例如,假设您有一个动物列表,并且想遍历该列表,每个动物都打印它们发出的声音。
{cat, dog, bird}一种方法是使用接口。这将允许在所有类上调用相同的方法
public interface Animal {
public String getSound();
}任何implementsAnimal也必须具有getSound()方法的类,但是它们都可以具有不同的实现
public class Dog implements Animal {
public String getSound() {
return "Woof";
}
}
public class Cat implements Animal {
public String getSound() {
return "Meow";
}
}
public class Bird implements Animal{
public String getSound() {
return "Chirp";
}
}现在,我们有三个不同的类,每个类都有一个getSound()方法。由于所有这些类implement都是Animal声明getSound()方法的接口,因此任何实例都Animal可以getSound()在其上调用
Animal dog = new Dog(); Animal cat = new Cat(); Animal bird = new Bird(); dog.getSound(); // "Woof" cat.getSound(); // "Meow" bird.getSound(); // "Chirp"
因为每个都是一个Animal,我们甚至可以将这些动物放在列表中,循环浏览它们,并输出它们的声音
Animal[] animals = { new Dog(), new Cat(), new Bird() };
for (Animal animal : animals) {
System.out.println(animal.getSound());
}因为阵列的顺序是Dog,Cat,然后Bird,“汪喵啁啾”将被打印到控制台。
接口也可以用作函数的返回值。例如,Dog如果输入是“dog”,Cat如果输入是“cat”,Bird如果是“bird”,则返回a,然后可以使用来打印该动物的声音
public Animal getAnimalByName(String name) {
switch(name.toLowerCase()) {
case "dog":
return new Dog();
case "cat":
return new Cat();
case "bird":
return new Bird();
default:
return null;
}
}
public String getAnimalSoundByName(String name){
Animal animal = getAnimalByName(name);
if (animal == null) {
return null;
} else {
return animal.getSound();
}
}
String dogSound = getAnimalSoundByName("dog"); // "Woof"
String catSound = getAnimalSoundByName("cat"); // "Meow"
String birdSound = getAnimalSoundByName("bird"); // "Chirp"
String lightbulbSound = getAnimalSoundByName("lightbulb"); //空值接口对于扩展性也很有用,因为如果您想添加的新类型Animal,则无需对接口执行的操作进行任何更改。