12.13
●抽象方法和抽象类( abstract修饰后的方法和类)
抽象类是一个特殊的类,类有的他基本都有,并且抽象类中还可以有抽象方法(只声明并没有方法体的方法),
普通类不能有抽象方法
抽象类的存在是为了实现-些难以具象化的方法(不能直接实例化) , 让其有具体对象时实现
抽象方法必须由子类继承后重写才能使用(当然抽象类的子类可以继续抽象那个抽象方法)
”●final和abstract不能同时存在
fina|不能被继承
abstract是需要被继承
.●抽象方法不能被static修饰
因为static是用来修饰类中可以直接用的属性或者方法,
但是抽象方法必须要继承后才能使用,所以不能被static修饰
●●抽象方法不能被private修饰
因为抽象方法的存在就是为了被继承后重写,
但是private的存在是为了不被继承后使用,所以不能被private修饰
●接口(特殊的抽象类interface修饰)
其中的属性只能为常量
就算没有用final修饰也为常量
●访问权限只能为public
必须给属性赋值
不写修饰符默认为public final
其中的抽象方法的访问权限只能为public
普通方法在JDK1.8之后可以用default修饰
也可以有静态方法
●在接口实现类中需要实现每个抽象方法
类和接口是实现关系,实现类的声明形式如下:
[访问权限修饰符] class 类名 [extends 父类名] [implements 接口列表]{
必须重写接口中的方法( ){ }
}
类与接口之间是实现关系,类实现接口。
接口不可以被实例化
实现了接口的实现类必须重写接口中所有抽象方法后,这个子类才可以被实例化,否则报错。
一个类可以实现多个接口,多个接口用逗号分隔,也可以不实现接口。
Java不支持多继承,Java将多继承机制进行改良变成了多实现
一个类在继承另一个类同时,还可以实现多个接口
接口的出现避免了单继承的局限性
接口和接口之间是继承关系
[修饰符] interface 接口名 extends 接口名,接口名 {
接口中的方法( ){
}
}
接口与接口之间是继承关系,而且可以多继承
接口的出现避免了单继承的局限性
- 在Java中接口是一个比抽象类更加抽象的概念,由于只声明行为,因此在接口中的方法均是抽象的,下表中罗列了接口和抽象类的差异:
|
abstract class |
interface |
|
|
属性 |
不用限制 |
public 静态 final 常量 |
|
构造方法 |
可有可无 |
没有 |
|
普通方法 |
可以有具体方法 |
必须是public抽象方法 |
|
子类 |
单一继承 |
多重实现(接口继承接口时为多重继承) |
- 抽象类体现继承关系,一个类只能单继承
- 接口体现实现关系,一个类可以多实现
- 抽象类是继承 is a关系 (所属关系)在定义该体系的基本共性内容
- 接口是实现是like a关系(不所属关系)在定义该体系额外功能
- 接口继承与类继承对比:
- Java类的继承是单一继承,Java接口的继承是多重继承
- 接口可实现多继承原因分析:
- 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A无法确定该继承那一个
- 接口全都是抽象方法,不存在实现冲突,继承谁都可以,所以接口可继承多个接口
- Java8之前,Java接口纯粹是契约的集合,是一种程序设计的表达方式。从数据抽象的角度看,能够在不定义class的同时又可以定义type,是程序设计中强大而有用的机制。Java接口就是这些纯粹的接口组成的数据抽象
- Java8之前,接口不能升级。因为在接口中添加一个方法,会导致老版本接口的所有实现类的中断

浙公网安备 33010602011771号