码迷,mamicode.com
首页 > 编程语言 > 详细

Java抽象类和接口

时间:2018-06-26 12:27:38      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:inter   操作   ted   问题   protect   扩展   初始   ace   成员变量   

interface是比抽象类更高层次的抽象,接口中的所有方法都是抽象方法,不会有任何实现方面的代码。

1. interface的方法只能是public abstract的。( Public abstract可以省略,也可以只写一部分,比如public void f() ) , 不能是private、protected等类型的。

2. interface的属性只能是public static final的。

  • 为什么必须是public呢?因为接口必须有实现才有意义,所以接口的变量和方法必须是public的。
  • 为什么必须是static的? static修饰是表示它属于类的,随的类的加载而存在的,如果是非static的话,就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,
  • 为什么必须是final的? 如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP原则(OCP原则:对扩展是开放的,对更改是封闭的)。

3. 为什么抽象类不能多继承?

  假如A中有方法f(),B和C继承了A,D继承了B和C,那A a = new D(); a.f()会调用B的方法还是C的方法呢?这就是致命方块问题。

4. 接口为什么不存在致命方块问题?

  假如接口A中有方法f(),接口B和接口C继承了A,D继承了B和C,那A a = new D(); a.f()会调用D的方法,因为B和C都是抽象方法。

5. 接口和抽象类的相同点。

  • 都不能初始化
  • 都能实现多态

6. 接口和抽象类的不同点。

  • 接口的方法都是public abstract的,成员变量都是public static final的,抽象类则随意。
  • 接口like-a,抽象类is-a
  • 接口多继承
  • 接口比抽象类更抽象
  • 抽象类有构造方法
  • 抽象类可以有实现了的方法。

5. 接口和抽象类的应用场景。

  • 当关注点在事物的本质的时候,用抽象类。当关注操作的时候,用接口。
  • is-a和like-a
  • 抽象类的功能要远超过接口,但是,因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类, 所以定义抽象类的代价高。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。接口也更适合复用。
  • 由于接口更关注于动作的实现,多态主要是分离“做什么”和“怎么做”,所以接口的另一个重要的应用就是多态的实现(当然抽象类也可以实现多态,但是接口更加合适)。为什么说接口更合适实现多态?因为抽象类的父子之间都有实现,不像接口中是"做什么",实现类中是"怎么做",一目了然。

Java抽象类和接口

标签:inter   操作   ted   问题   protect   扩展   初始   ace   成员变量   

原文地址:https://www.cnblogs.com/lybb/p/9228266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!