抽象类的概念
首先明确,类是现实生活中不存在的,是人类大脑思考总结的结果。而抽象类是类与类之间的共同特征,将这些具有共同特征的类再进一步抽象就形成了抽象类
抽象类的语法
[修饰符列表] abstract class 类名{
类体;
}
抽象类的特点
- 抽象类属于引用数据类型
- 抽象类无法被实例化,无法创建对象,是专门用来被子类继承的一种类
- 抽象类的子类还可以是抽象类
- 抽象类有构造方法,构造方法是供子类使用的
- 抽象类关联到一个概念:抽象方法,即没有实现的方法,有abstract修饰的没有方法体的方法
- 抽象类中不一定有抽象方法,但抽象方法必须出现在抽象类中
抽象方法的语法
[修饰符列表] abstract 返回值类型 类名(参数列表);
接口的概念
我们知道知道java中只支持单继承,但如果我们想定义一些功能,想让一个子类都继承实现,显然没办法做到,所有Java提供了接口这个概念,这样我们就可以用一个子类去实现多个接口。我们可以理解为接口就是特殊的抽象类
接口的语法
[修饰符列表] interface 接口名{
}
接口的特点
- 接口是一种引用数据类型
- 接口是完全抽象的。(抽象类是半抽象)或者也可以说接口时特殊的抽象类
- 接口支持多继承,一个接口可以继承多个接口,类也可以同时实现多个接口
- 接口中只包含两部分内容,一部分是常量(public static final 可以省略),另一部分是抽象方法(接口中的方法不能有方法体)
- 接口中所有的元素都是public修饰的,方法都是public abstract修饰的
- 继承接口,又称为接口的实现,继承接口必须使用implements关键字,而且必须实现接口内所有的方法
- 接口可以与多态联合使用,即接口类型引用指向子类对象
- 经过测试,接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转,编译器不报错,但是运行时会报异常
如果继承和接口共存该怎样写??
extends关键字在前,implement关键字在后,否则报错
接口在开发中的作用
1.类似于多态的作用
多态:面向抽象编程,降低程序的耦合度,提高程序的扩展力。
举个例子:
中午去饭店吃饭,这个过程中就体现了接口的作用
首先,菜单可以作为一个接口(菜单上有一个抽象的照片:西红柿炒鸡蛋)
顾客面向菜单点菜,调用接口
后台厨师负责把西红柿鸡蛋做好,是接口的实现者
这个接口有什么作用呢?
这个饭馆的“菜单”,让“顾客”和“后厨”解耦合了,顾客不用找后厨,后厨不用找顾客,他们之间完全依靠这个抽象的菜单沟通。
代码如下:
菜单接口
public interface FoodMenu {
//西红柿炒鸡蛋
void shiZiChaoJiDan();
}
中国厨师类
public class ChineseCook implements FoodMenu{
public void shiZiChaoJiDan(){
System.out.println("中国厨师炒鸡蛋");
}
}
外国厨师类
public class ForeignCook implements FoodMenu{
public void shiZiChaoJiDan() {
System.out.println("外国厨师在炒鸡蛋");
}
}
顾客类
class Customer{
/*
顾客里有一个菜单,是一个has a关系,has a 关系统一以属性方式存在
*/
private FoodMenu foodMenu;
/*
如果这样写,就表示写死了
ChineseCook cc;
ForeignCook fc;
*/
public Customer() {
}
public Customer(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public FoodMenu getFoodMenu() {
return foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
void order(){
foodMenu.shiZiChaoJiDan();
}
}
测试
public class Test {
public static void main(String[] args) {
//创建厨师对象
FoodMenu cook1 = new ChineseCook();
//创建顾客对象
Customer c = new Customer();
//顾客点菜
c.setFoodMenu(cook1);
c.order();
}
}
输出结果

总结一句话:
面向 接口编程,可以降低程序的耦合度,提高程序的扩展里,复合OCP开发原则,接口的使用离不开多态机制。
接口可以将调用者和实现者解耦合。
类型和类型之间的关系
is a:
凡是满足is a的表示“继承关系”
has a:
凡是满足has a关系的表示“关联关系”
关联关系通常以“属性”的形式存在
like a:
例如厨师像一个菜单
凡士能够满足like a关系的表示“实现关系”
实现关系通常是“类实现关系”
抽象类和接口的区别
- 抽象类是半抽象的,接口是完全抽象的
- 抽象类中有构造方法,接口中没有构造方法
- 接口与接口之间支持多继承,类与类之间只能单继承
- 一个类可以实现多个接口
- 一个抽象类只能继承一个类
- 接口只允许出现常量和抽象方法
本文深入探讨了抽象类和接口的概念,包括它们的定义、特点、语法和在Java中的使用方式。通过具体示例,解释了如何利用抽象类和接口进行面向抽象编程,以降低程序耦合度并提高扩展性。
1879

被折叠的 条评论
为什么被折叠?



