文章目录
- Java抽象类与接口:从概念到实战
- 前言
- 一、抽象类
- 抽象类概念
- 抽象类语法
- 抽象类特性
- 抽象类的作用
- 二、接口
- 接口的概念
- 语法规则
- 接口使用
- 接口特性
- 实现多个接口
- 接口间的继承
- 接口使用实例
- 抽象类和接口的区别
- 总结
前言
抽象类和接⼝的学习
一、抽象类
抽象类概念
如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类
在打印图形例⼦中,⽗类Shape中的draw⽅法好像并没有什么实际⼯作,主要的绘制图形都 是由Shape的各种⼦类的draw⽅法来完成的.像这种没有实际⼯作的⽅法,我们可以把它设计成⼀个 抽象⽅法(abstractmethod),包含抽象⽅法的类我们称为抽象类(abstractclass)
抽象类语法
在Java中,⼀个类如果被abstract修饰称为抽象类,抽象类中被abstract修饰的⽅法称为抽象 ⽅法,抽象⽅法不⽤给出具体的实现体。
注意:抽象类也是类,内部可以包含普通⽅法和属性,甚⾄构造⽅法
抽象类特性
1.抽象类不能直接实例化对象
2. 抽象⽅法不能是private的
3. 抽象⽅法不能被final和static修饰,因为抽象⽅法要被⼦类重写
4. 抽象类必须被继承,并且继承后⼦类要重写⽗类中的抽象⽅法,否则⼦类也是抽象类,必须要使⽤ abstract 修饰
5. 抽象类中不⼀定包含抽象⽅法,但是有抽象⽅法的类⼀定是抽象类
6. 抽象类中可以有构造⽅法,供⼦类创建对象时,初始化⽗类的成员变量
抽象类的作⽤
抽象类本⾝不能被实例化,要想使⽤,只能创建该抽象类的⼦类.然后让⼦类重写抽象类中的抽象⽅法.
使⽤抽象类相当于多了⼀重编译器的校验. 使⽤抽象类的场景就如上⾯的代码,实际⼯作不应该由⽗类完成,⽽应由⼦类完成.那么此时如果不⼩⼼ 误⽤成⽗类了,使⽤普通类编译器是不会报错的.但是⽗类是抽象类就会在实例化的时候提⽰错误,让我 们尽早发现问题.
二、接⼝
接⼝的概念
接⼝就是公共的⾏为规范标准,⼤家在实现时,只要符合规范标准,就可以 通⽤。 在Java中,接⼝可以看成是:多个类的公共规范,是⼀种引⽤数据类型。
语法规则
接⼝的定义格式与定义类的格式基本相同,将class关键字换成interface关键字,就定义了⼀个接 ⼝。
1. 创建接⼝时,接⼝的命名⼀般以⼤写字⺟I开头.
2. 接⼝的命名⼀般使⽤"形容词"词性的单词.
接⼝使⽤
接⼝不能直接使⽤,必须要有⼀个"实现类"来"实现"该接⼝,实现接⼝中的所有抽象⽅法。
实现笔记本电脑使⽤ USB ⿏标、 USB 键盘的例⼦
1. USB 接⼝:包含打开设备、关闭设备功能
2. 笔记本类:包含开机功能、关机功能、使⽤ USB 设备功能
3. ⿏标类:实现 USB 接⼝,并具备点击功能
4. 键盘类:实现 USB 接⼝,并具备输⼊功能
接⼝特性
1. 接⼝类型是⼀种引⽤类型,但是不能直接new接⼝的对象
2. 接⼝中每⼀个⽅法都是public的抽象⽅法,即接⼝中的⽅法会被隐式的指定为public abstract(只 能是public abstract,其他修饰符都会报错)
3. 接⼝中的⽅法是不能在接⼝中实现的,只能由实现接⼝的类来实现
4. 重写接⼝中⽅法时,不能使⽤默认的访问权限
5. 接⼝中可以含有变量,但是接⼝中的变量会被隐式的指定为public static final变量
6. 接⼝中不能有静态代码块和构造⽅法
7. 接⼝虽然不是类,但是接⼝编译完成后字节码⽂件的后缀格式也是.class
8. 如果类没有实现接⼝中的所有的抽象⽅法,则类必须设置为抽象类
实现多个接⼝
在Java中,类和类之间是单继承的,⼀个类只能有⼀个⽗类,即Java中不⽀持多继承,但是⼀个类可 以实现多个接⼝。下⾯通过类来表⽰⼀组动物
上⾯的代码展⽰了Java⾯向对象编程中最常⻅的⽤法:⼀个类继承⼀个⽗类,同时实现多种接⼝
继承表达的含义是is - a语义,⽽接⼝表达的含义是 具有 xxx 特性
接⼝间的继承
在Java中,类和类之间是单继承的,⼀个类可以实现多个接⼝,接⼝与接⼝之间可以多继承。即:⽤接⼝可以达到多继承的⽬的。 接⼝可以继承⼀个接⼝,达到复⽤的效果. 使⽤extends关键字.
以青蛙为例,典型的两栖动物
实现run⽅法,也需要实现swim⽅法
接⼝使⽤实例
对象之间进⾏⼤⼩关系⽐较
⽅式⼀:使⽤Comparable接⼝
⽅式⼆:使⽤Comparator接⼝
抽象类和接⼝的区别
核⼼区别:
抽象类中可以包含普通⽅法和普通字段,这样的普通⽅法和字段可以被⼦类直接使⽤(不必重 写)
接⼝中不能包含普通⽅法,⼦类必须重写所有的抽象⽅法.