接口与抽象类
接口与抽象类很相似,但也一定区别。这是我的第二篇博客,总结类接口与抽象类的相关知识。如果在博客中有错误,还请指出。
抽象类
- 抽象类的概念:一个无法确定实现部分的方法,只能确定申明部分,此时不应该打上{ },而是直接书写申明部分然后“;”号结束。这种只有申明没有实现的方法,叫做:抽象方法。语法上,抽象方法由一个可选修饰符abstract修饰,而拥有抽象方法的类,必须用abstract修饰定义为抽象类。
- 抽象类的作用:专门用来充当父类。
- 抽象类的特点:
- 抽象类不产生对象,但是它还是必须有构造方法。它的构造方法不能单独使用,是由它的子类在产生子类对象的时候调用的。
- 抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类。
- 用abstract修饰的类是抽象类,用final修饰的类是最终类,抽象用来继承,而最终类不能被继承
- 子类继承抽象类有两种形式:1.实现父类全部的抽象方法。2.没有实现全部的抽象方法,将子类也用abstract修饰为抽象类。
接口
-
接口的概念:抽象类是从多个类中提取出来的模板 ,而将这种抽象进行的更彻底,则可以提取出一种特殊的“抽象类”(接口)在接口中,只能有抽象方法不能有普通方法。接口名字往往是叫做****able,代表具有什么样的能力
-
接口的设计原因:
1、没有继承关系的类也可以有相同的行为。
2、接口解决了单继承丰富度不够的问题 -
接口的作用:
-
暴露类的某些行为,允许类的用户通过接口的实现类来使用接口中的方法。
-
强制一个类具有某些行为,比如:一个方法,参数列表只有一个接口类型的引用,那么能够传递进来的类一定是该接口的实现类,具备该接口的方法。
-
接口的特点:
1、公共接口的名字 必须 与它所在的java文件文件名一致
2、接口的访问修饰符只能是public,就算不写也是默认为public而不是同包
3、 接口可以继承接口,而且它可以多继承!
4、接口的属性只能是公共静态常量属性,修饰符关键字全部可以省略,但省略后也是默认为公共静态常量的 。
5、接口没有构造器不能产生对象。
6、接口不能有初始化块,不管是实例还是静态初始化块
7、接口里面只能有抽象方法,访问修饰符只能是public,可以省略public abstract,但是不写也会默认为公共抽象(JDK1.8,Java运行接口当中定义实现了的方法,虽然有这个功能,但是接口的最大的意义还是写抽象方法,让没有继承关系的类可以共享行为,但又可以各有各的实现!) -
接口与类的关系叫做:实现,一个类在申明的最后用implements关键字,后面跟上接口的名字即可。这个类就被称之为某某接口的实现类一个类可以在继承父类的同时,又实现接口!继承只能是单继承,但实现接口是多实现! 语法上:先写继承,再写实现,如果没有写继承则默认继承Object;
-
类从接口中获取的方法会参与到继承中去.
-
动态绑定的方式:动态绑定有两种方式
方式一:父类的引用指向子类的对象,父类的引用只能看见对象上父类的部分
方式二:接口的引用可以指向实现类的对象, 接口的引用只能看到对象身上来自于这个接口的行为
接口与抽象类的异同
- 相识之处:
- 都不能被实例化 ,都是出于继承链的顶端,被继承或实现。
- 都包含抽象方法,实现接口或继承抽象类都必须实现全部的抽象方法。
- 不同之处:
- 设计目的不同,接口通常作为系统与外界交互第一个窗口,体现规范性,而抽象类通常作为多个子类的共同父类,体现的是一种模板设计。
- 接口中只能有抽象方法,而抽象类中可以有普通方法。
- 接口不能有静态方法,抽象类可以定义静态方法
- 接口 中的属性只能定义为public static final 而抽象类中可以定义 普通属性,也可以定义静态属性。
- 接口中不能有初始化快,而抽象类中可以有
- 接口中不能含有构造方法,而抽象类中可以有,用于子类调用
- 一个类只继承一个父类,一个接口可以继承多个接口。