理解多态
???????? 何谓java多态,接口是什么?
???????? 首先从面向对象的角度理解一下接口,接口实际上是对象的一种抽象,定义某一类对象必须具有的行为和属性。
?????????接口可以有不同的实现类,一旦实现这个接口即必须具体的实现这个类的行为,那么这个实现类就是这个抽象类型的一个具体的类型,举个常用的小例子,比如定义一个动物接口,其中定义动物的属性包括名称、体重,定义动物接口的行为包括吃东西,奔跑等行为,那么具体的动物比如猫、狗,这些类实现动物这个接口,那么就必须具体的确定猫的名称,猫的体重,猫吃东西的行为,奔跑的行为,同理狗也必须实现想要的行为和属性。一个抽象类型的有多种不同的实现类,那么实际上就是java多态的表现了。
???????? 接口有两个特性:关联可插入性、调用可插入性。
???????? 上述这种面向对象的思想实际上理解起来并不困难,那么为什么要这么做呢,它这样做有什么好处呢?
???????? 有个父类引用指向子类对象的这么一个概念,可以把接口理解为一个抽象的父类型,那么这个父类型的引用可以指向子类的的对象。在java中是如何使用的呢,看下面的小例子,
?
??????? class SimpleFactory{
?????????????? public Animal? animal;//动物的抽象接口
?????????????? public static?? SimpleFactory? getInatance(){
??????????????????????? return? new SimpleFactory();
?????????????? }
?????????????? public??void setAnimal(Animal? animal)
?????????????? {
??????????????????????? this.animal = animal;
??????????????? }
?????????????? public void? do(){
?????????????????????? animal.eat();
?????????????? }
?????????????? public static void main(String[] args){
????????????????????? SimpleFactory? factory =?SimpleFactory.getInstance();
???????????????????????factory.setAnimal(new Dog());
????????????????????? ?factory.do();//这个时候会表示出狗动物吃的行为
???????????????????????factory.setAnimal(new Cat());
?????????????????????? factory.do();//这个时候又会表示出猫动物吃的行为
?????????????? }
?????? ?? }
?
???????? 上述小例子说明什么问题呢,实际上猫、狗是具体的一种动物,而动物接口只是一种抽象的类型,那么这种接口类型引用可以指向实现了这个接口的类的对象,那么在实际开发中,比如,写一个servlet必须继承HttpServlet抽象类或者实现接口,容器才能管理这个servlet的生命周期。再比如抽象工厂,实际上一个工厂只能生产符合某一个标准的产品,这个标准实际上就是一种接口规范,想要生产的产品必须符合这个工厂接口规范才能进行生产,现实生活中的工厂其实也是如此。
???????? 在大的框架下的应用更加广泛并且是离不开的 ,为什么上面的小例子不直接创建猫狗的实例,直接调用行为不就完了吗?实际上在框架设计中都是通过配置文件配置的这些类,程序通过动态加载连接初始化字节码并创建类的实例并注入到相关的类,在通过父类引用进行调用。在监听器模式中使用非常经典。
????????