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

java——为什么要有接口?和抽象类有什么不一样?

时间:2018-11-27 01:32:31      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:出现   一个   输入输出   nts   没有   imp   不能   源代码   开放   

1.接口不是类,为什么?

  接口如果是类,那就失去了java引入接口的意义了。

  java之所以引入接口,就是为了弥补不能多继承的缺点,在java中每个类只能有一个超类,但却可以实现多个接口。

2.接口可以有静态常量(一定是静态的,无论写没写static),但是不能含有实例域,为什么?

  接口就类似一个说明文档,定义继承接口的类应该必须有什么方法以及该方法的输入输出。

  接口的思想不允许出现变量,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

3.接口中可以有静态方法,为什么?

  JAVA SE 8中可以定义带有方法体的静态方法,以保证“源代码兼容”。

4.就扣可以有静态常量,并且这个常量一定是静态的,为什么?

  因为static是所有对象可以访问,而且可以直接通过类名访问。接口没有对象,必须通过类名来访问所以是要静态的。

 

想清楚这些,再想想接口和抽象类有什么不一样,什么时候用接口,什么时候用抽象类?

  1.抽象类是类,但接口不是。

  2.接口中的方法都是抽象方法,而抽象类必须有抽象方法,但也可以有普通方法。

  3.接口定义的方法以及常量都是public,而抽象类是可以有私有方法或私有变量的。

  4.实现接口需要实现接口中的每一个方法,而继承抽象类则可以选择实现抽象类中的一部分抽象方法,但此时这个子类仍然是一个抽象类。

  5.接口可以实现多继承,但是一个类只能实现一个超类。

  6.接口中定义的变量默认是public static final 型,必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是default 型,其值可以在子类中重新定义,也可以重新赋值。

  接口更像是一种协议,实现接口的子类需要按照这种协议来编写自己的代码,但抽象类就更接近一个不能实例化的普通类,只不过为了子类更加灵活多变,将一部分方法留给子类去实现,这也体现了java的多态。

java——为什么要有接口?和抽象类有什么不一样?

标签:出现   一个   输入输出   nts   没有   imp   不能   源代码   开放   

原文地址:https://www.cnblogs.com/gaoquanquan/p/10023468.html

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