Java中接口和抽象类
来源:互联网 发布:mac文件导入移动硬盘 编辑:程序博客网 时间:2024/04/28 10:17
浅析Java中的接口和抽象类
一、抽象类
1 抽象方法
只有声明,没有具体实现;
抽象方法必须用abstract关键字修饰,声明格式为:
abstract void fun();
2 抽象类
2.1 若一个类含有抽象方法,则该类称为抽象类;
注意:抽象类中可以没有抽象方法,只要用abstract修饰就认为是抽象类;
2.2 抽象类必须在类前用abstract关键字修饰;
抽象类不能创建对象,因为抽象类中可能含有抽象方法;
[public] abstract class ClassName{abstract void fun();}
2.3 包含抽象方法的类是抽象类,但并不意味抽象类只能有抽象方法,其和普通类一样,可拥有成员变量和普通的成员方法;
2.4 抽象类和普通类的区别:
抽象方法必须是public(默认)或protected,因为private是不能被子类继承的,即子类无法实现该方法;
抽象类不能用来创建对象;
若一个类继承于一个抽象类,则子类必须实现父类所有的抽象方法;若子类没有实现父类的抽象方法,则必须将子类也定义为abstract类;
二、接口
1 接口概念
接口是对行为的抽象;定义接口形式如下:
[public] interface InterfaceName{}
2 接口中的成员变量/方法
接口中可以含有变量和方法,但接口中的变量被隐式地指定为且只能是public static final变量,接口中的方法被隐式地指定为且只能是public abstract方法,即接口中的所有方法都不能有具体实现——抽象方法;
注意:接口是一种极度抽象的类,比抽象类更抽象,且一般不在接口中定义变量;
3 接口实现
一个类遵循某组接口需要使用implements关键字,格式如下:
class ClassName implements Interface1, [Interface2, ...]{}
允许一个类实现多个接口;
若一个非抽象类实现某个接口,必须实现接口的所有抽象方法;
若一个抽象类实现某个接口,可不实现接口中的抽象方法;
三、抽象类和接口的区别
1 语法层面上
1.1 抽象类可提供成员方法的具体实现,接口中只能存在public abstract方法
1.2 抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型的
1.3 抽象类可含有静态代码块和静态方法,接口中不能含有静态代码块和静态方法
1.4 一个类只能继承一个抽象类,但可实现多个接口
2 设计层面上
2.1 抽象类是对整个类的抽象,接口是对类局部(行为)的抽象
继承是“是不是“的关系,若一个类继承某个抽象类,则子类必定是抽象类的种类,
接口实现则是“有没有”、”具备不具备“的关系;
2.2 抽象类作为很多子类的父类,是一种模板式设计;
接口作为规范,是一种辐射式设计;
四、举例(具体见原博文)
Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。
最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。
interface Alram { void alarm();}abstract class Door { void open(); void close();}class AlarmDoor extends Door implements Alarm { void oepn() { //.... } void close() { //.... } void alarm() { //.... }}
注明:此文章是转载海子的博文,详情见:http://www.cnblogs.com/dolphin0520/p/3811437.html
- java中抽象类和接口异同
- java中抽象类和接口区别
- java中抽象类和接口总结
- java中接口和抽象类
- java中接口和抽象类
- Java中抽象类和接口定义
- java中接口和抽象类
- JAVA中接口和抽象类
- Java中接口和抽象类
- Java中抽象类和接口区别
- java中接口和抽象类
- Java中抽象类和接口
- java中抽象类和抽象接口的区别
- Java 抽象类,抽象方法和接口
- Java抽象类和抽象方法、接口
- 【JAVA】Java中抽象类和接口的区别
- 【Java进阶】Java中抽象类和接口区别
- java中接口和抽象类的区别和介绍
- 命令行执行 mvn package 和常见mvn命令
- EMail诞生记
- NanoPC-T2 Uboot启动过程分析 - 2-4 init_sequence_f[] part 2
- 记录自己的成长
- java数据结构之排序_排序算法的时空复杂度介绍
- Java中接口和抽象类
- UIMenuItem的用法
- listview的item动画
- 【Java基础】Java正则表达式入门
- bfs+很巧妙的一个记录路径方式!!
- shell脚本输出文件夹下所有目录的绝对路径
- Android】RxJava + Retrofit完成网络请求
- Windows自定义消息ID
- Email诞生记(下)