抽象类的具体应用可以看下这个简单的例子:

  • 不要去继承一个已经实现好的类-----因为有抽象类和接口
  • 下面是一个抽象类的用法

 

) ;
        p.say() ;
    }
};

 

  • 当需要继承多个类时,我们可以用接口,接口也是方法全是抽象方法的抽象类,实现接口的类,也是改接口的子类,也可以进行转型操作
//可以看到向上转型操作,由子类为接口对象实例化
        a.fun() ;
    }
};

 

 UDisk()) ;
    }
};

 

  • 可以看到都是多态性的应用都是子类向父类转型
  • 抽象类与接口在使用上如此相似,我们开发时优先使用接口,接口允许多继承
  • 接口和抽象类的比较:
  1. 相同点:对象都不能实例化,通过多态性,都可由子类来实例化
  2. 不同点:抽象类:

         包括一般方法、抽象方法、常量、变量

         可以有构造方法,毕竟是一个类

         抽象类可以实现多个接口

         继承时单继承会有局限

                  接口:

         包括常量,抽象方法。只是在接口定义中省略abstract

         不能有构造方法

         接口不能继承一个抽象类

         解决单继承带来的局限性

  • 从设计模式上来说:

    接口中都是抽象方法,实现接口的子类必须都得覆写其中的方法,如果子类不希望都覆写,而只是希望使用其中的一个时,那怎么办呢?

  • 可以在之中加一个抽象类来实现  接口---->抽象类----->子类  也即是适配器模式Adapter,看下面的例子:
//多态的体现
    }
};
  • 接口可以进一步扩展---->工厂模式,在上面的USB例子中发现子类与接口紧密耦合,即USB a =new Mp3();发现如果子类需要变化,则我们必须修改客户端,而这在实际的开发中是不好的。可以加上一个工厂来解耦合
//这样后以后子类要是有变动,只需改工厂即可
        u.start() ;
        u.stop() ;
    }
};
  • 重点:抽象类和接口都可以实例化,通过对象的多态性来实例化。

 

 

 

相关文章: