此处的"接口"与程序设计语言中的"interface"定义稍有不同,“面向接口编程”中的接口是一种思想层面的用于实现多态性、提高软件灵活性和可维护性的架构部件,而具体语言中的“接口”是将这种思想中的部件具体实施到代码里的手段。
优点:
1.可扩展性良好.例子:
public interface HardWare {
void useIt();
}
public class VideoCard implements HardWare {
void useIt() { Somtthing about VideoCard here ...}
}
public class AudioCard implements HardWare {
void useIt() { Something about AudioCard here ...}
}
public static startHardWare(HardWare hardWare) {
hardWare.useIt();
}
public void main(String[] args) {
//startHardWare(new AudioCard());
startHardWare(new VedioCard());
}
解析:startHardWare()方法中的参数类型是HardWare,这样如果要对其他HardWare调用startHardWare(),就无需对main()方法和startHardWare()做任何修改,只需要修改参数,这就是良好的可扩展性,也符合开闭原则.
例如.新添加一个硬件
public class networkCard implements HardWare {
void useIt() { Something about networkCard here ...}
}
在main()中只需修改参数 startHardWare(new networkCard()) 即可
2.支持多继承.
假如有两个特性
public interface Fly { ... }
public interface Run { ... }
有一个类
public Monster implements Fly, Run { ... }
这样他就同时拥有了Fly和Run,而用抽象类则无法做到,因为抽象类只支持单继承
优点:
1.可扩展性良好.例子:
public interface HardWare {
void useIt();
}
public class VideoCard implements HardWare {
void useIt() { Somtthing about VideoCard here ...}
}
public class AudioCard implements HardWare {
void useIt() { Something about AudioCard here ...}
}
public static startHardWare(HardWare hardWare) {
hardWare.useIt();
}
public void main(String[] args) {
//startHardWare(new AudioCard());
startHardWare(new VedioCard());
}
解析:startHardWare()方法中的参数类型是HardWare,这样如果要对其他HardWare调用startHardWare(),就无需对main()方法和startHardWare()做任何修改,只需要修改参数,这就是良好的可扩展性,也符合开闭原则.
例如.新添加一个硬件
public class networkCard implements HardWare {
void useIt() { Something about networkCard here ...}
}
在main()中只需修改参数 startHardWare(new networkCard()) 即可
2.支持多继承.
假如有两个特性
public interface Fly { ... }
public interface Run { ... }
有一个类
public Monster implements Fly, Run { ... }
这样他就同时拥有了Fly和Run,而用抽象类则无法做到,因为抽象类只支持单继承