0. 理解
接口,定义了一堆空实现函数的接口,如下,是对其全部实现类的约束,即必须实现我(接口)事先规定的那些方法,以使得我在操纵父类接口(指向子类实现)时,获得一种操作上的一致性(多态),而忽视其子类具体实现上的差异,即封装变化;
public interface Iterator { boolean hasNext(); Object next(); }
1. 针对接口编程是多态性的体现
- 针对对象编程简单地说,就是传递的是具体的子类;
- 而针对接口编程,传递的则是父类引用,这样便可发挥多态性“父类引用指向子类对象”的特点和优势;
来看一个简答的例子:
public interface Animal {
...
public void makeSound();
}
具体到“狗”,需给出其实现:
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Wang! Wang!");
}
}
同理可给出其他具体动物类(猪牛羊等)的叫声实现。此时如何传递动物的实例化对象,调用其叫声方法呢?
针对实现编程:
public void hearDogSound(Dog dog) { dog.makeSound(); }
如果需要调用牛的叫声方法:
public void hearCowSound(Cow cow){ cow.makeSound(); }
针对对象编程,每想调用不同子类对象的共有方法,都要去创建一个与该类相关的 hearSound() 方法,这样在 interface 中定义的共有方法便失去了意义。
针对接口编程:
public void hearSound(Animal animal) { animal.makeSound(); }