抽象类
没有实际工作的方法称为抽象方法,包含抽象方法的类称为抽象类
abstract class shape {
abstract public void draw();//抽象方法没有方法体,不执行具体的代码
}
-
抽象类不能直接实例化
-
抽象类和普通类区别是多了一个抽象方法
-
普通类继承抽象类,普通类需要重写抽象类中的抽象方法
-
抽象方法一定要被重写。
-
抽象方法的访问修饰限定符不能是private
-
抽象类中可以包含非抽象方法和字段
抽象类存在的意义:继承。要想使用抽象类子类重写抽象类中的抽象方法。
接口
接口是比抽象类的“升级版”抽象类中可以包含非抽象方法和字段,但是接口中包含的方法都是抽象方法,字段只能包含静态常量
interface Shape {
void draw();
}
class cycle implements Shape {
@Override
public void draw() {
System.out.println("画○");
}
}
- 使用关键字interface定义接口
- 接口中的方法一定是抽象方法,可省略abstract
- 及口中的方法一定是public,可省略public
- cycle implements Shape 代表实现
- 在调用的时候同样可以创建一个接口的引用,对应到一个子类的实例
Shape shape = new cycle();
- 接口不能被单独实例化
- 接口中只能包含静态常量
- 接口也可以发生 多态.
实现多个接口
interface A{
void A();
}
interface B{
void B();
}
interface C extends A,B{
void C();
}
class D implements C{
@Override
public void A() {
}
@Override
public void B() {
}
@Override
public void C() {
}
}
- 接口之间可通过extends关键字进行“扩展”
- 如上 接口C扩展了A,B, 类D实现了接口C,不仅要重写C中的方法,也要重写A和B中的方法
- 接口的出现弥补了java不能实现多继承的缺陷
- jdk 1.8新特性 default修饰接口中的方法可以指定方法体