多语言展示
当前在线:1169今日阅读:39今日分享:10

深入分析java抽象类和接口

接口和抽象类为我们提供了一种将接口与实现分离的更加结构化的方法,这两种有什么区别呢,又有哪些应用场景呢
工具/原料

java,eclipse

方法/步骤
1

java提供了一种叫做抽象方法的机制,但是仅有声明而没有方法体,语法如下:abstract void method();如果一个类包含一个或者多个抽象方法,该类就必须被限定为抽象类。如下:

2

接口是一种特殊的抽象类,是完全抽象的类,允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。即:接口只提供了形式,不提供任何具体实现,创建接口用interface关键字,类只能单继承,而接口可以实现多个,当同事继承类并且实现接口时候,必须将继承放在前面,否则编译器会报错,如下:

3

接口中的方法可以显示的声明为public,但是即使不这么做,默认也是public。因此当我们实现一个接口时,在接口中被定义的方法就必须被定义为public,否则,他们只能得到默认的包访问权限,这样在方法的继承过程中,其可访问权限就被降低了,这是java编译器所不允许的。

4

当我们继承一个类或者实现一个接口时候,必须实现抽象类或者接口中的所有的抽象方法,除非用抽象类去继承一个抽象类或者实现一个接口,可以只实现部分接口,这个特性在很多框架中都会得到利用:先定义一个接口,然后定义几个抽象类去实现,再根据需求去用不同的实现类继承相应的抽象类:

5

接口最吸引人的原因之一就是允许同一个接口具有不同的具体实现,在简单的情况中,它的体现形式通常是一个接受接口类型的方法,而该接口的实现和向该接口传递的对象则取决于方法的使用者:

6

接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂设计模式。这与直接调用构造器不同,我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实例对象。理论上,通过这种方式,我们的代码将完全与接口实现分离,这就使得我们可以透明的将某个实现替换为另一个实现。如下例子中,我们在CanFlyFactory工厂类的实现类CanFlyFactoryImpl中实现了活动CanFly对象方法,并且返回了CanFly的实现类Hero1对象

注意事项

任何抽象性都应该是应真正的需求而产场的,当必须时,应该重构接口而不是到处添加额外级别的间接性

推荐信息