抽象类和接口
类到对象是实例化,对象到类是抽象
抽象类:
1:什么是抽象类?
类和类之间有共同特征,将这些共同特征提取出来,形成的就是抽象类
类本身是不存在的,所以抽象类无法创建对象《无法实例化》
2:抽象类属于什么数据类型?
抽象类也属于引用数据类型。
3:抽象类怎么定义?
语法:
[修饰符列表] abstract class 类名{
类体;
}
4:抽象类是无法实例化的,无法创建对象,所以抽象类是用来被子类继承的
5:抽象类关联到一个概念:抽象方法。什么是抽象方法?
抽象方法表示没有实现的方法,没有方法体的方法
例如:public abstract void dosome();
抽象方法特点是:
特点1:没有方法体,以分号结尾。
特点2:前面修饰符列表中有abstract关键字。
6:抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中
***** 一个非抽象的类继承抽象类,必须将抽象类的方法实现了(即重写)
接口:
1:接口也是一种引用数据类型,编译自后也是一个class字节码文件
2:接口是完全抽象的。(抽象类是半抽象)或者也可以说接口是特殊的抽象类
3:接口怎么定义,语法是什么?
[修饰符列表] interface 接口名{}
4:接口支持多继承,一个接口可以继承多个接口
5:接口中只包含两部分内容,一部分是:常量,一部分是:抽象方法
接口中没有其他内容了,只有以上两部分
6:接口中所有的元素都是public修饰的(都是公开的)
7:接口中的抽象方法的public abstract修饰符可以省略
8:接口中常量的public static final可以省略
9:接口中的方法都是抽象方法,所以接口中的方法不能有方法体
interface A{ //接口的定义 }
接口的基础语法:
类和类之间叫做继承,类和接口之间叫做实现
仍然可以将 实现 看作 继承。
继承使用extends关键字完成
实现使用 implements 关键字完成
***** 当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖、重写)
3:接口和接口之间支持多继承(extends)
一个类可以同时实现多个接口(implements)
这种机制弥补了Java中哪个缺陷?
Java中类和类之间只支持单继承,实际上单继承是为了简单而出现的,现实世界中存在多继承,Java中的接口弥补了单继承带来的缺陷。
interface A{ void m1(); } interface B{ void m2(); } interface C{ void m3(); } class D implements A,B,C{ public void m1() { } public void m2() { } public void m3() { }
继承和实现都存在的话,代码应该怎么写?
extends关键字在前
implements 关键字在后
class Animal{ } interface Flyable{ void fly(); } class Cat extends Animal implements Flyable{ public void fly() { //实现某一接口,必须对接口中的方法进行重写 System.out.println("一只会飞的猫"); } }
接口在开发中的作用:
面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合OCP开发原则。
接口的使用离不开多态机制。(接口+多态 才可以达到降低耦合度)
接口可以解耦合,解开谁和谁的耦合??
任何一个接口都有调用者和实现者。
接口可以将调用者和实现者解耦合。
调用者面向接口调用,实现者面向接口实现
以后进行大型项目的开发,一般都是将一个项目分成一个模块一个模块的,模块和模块之间采用接口衔接。降低耦合度。
类型和类型之间的关系:
is a(继承)、has a(关联)、 like a(实现)
is a:
Cat is a Animal
凡是能够满足 is a 的表示“继承关系”
A extends B
has a:
I has a pen
凡是能够满足has a 关系的表示“关联关系”
关联关系通常以“属性”的形式存在。
A{
B b;
}
like a:
Cooker like a foodMenu
凡是能够满足like a 关系的表示“实现关系”
实现关系通常是:类实现接口。
A implements B
抽象类和接口的区别:
在这里只说一下抽象类和接口在语法上的区别
至于以后抽象列和接口如何进行选择,通过后面的项目去体会/学习。
抽象类是半抽象的。
接口是完全抽象的。
抽象类中有构造方法
接口中没有构造方法
接口和接口之间支持多继承
类和类之间只能单继承
一个类可以同时实现多个接口
一个抽象类只能继承一个类(单继承)
接口中只允许出现常量和抽象方法
这里先透漏一个信息:
以后接口使用的比抽象类多。一般抽象类使用的还是少。
接口一般都是对“行为”的抽象。
浙公网安备 33010602011771号