生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。人

随笔 - 151  文章 - 0  评论 - 117  阅读 - 108万 

  抽象类是用来捕捉子类的通用特性的,描述的是一种事物,它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

  接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。

  抽象类是对整个类进行抽象,包括属性,行为,而接口是对类局部(行为)进行抽象。

 

  举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是会飞。那么在设计的时候,可以将客机设计为一个类Aircraft,将鸟设计为一个类Bird,但是不能将飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将飞行设计为一个接口Fly,包括方法fly(),Aircraft和Bird分别根据自己的需要实现Fly这个接口。至于有不同种类的飞机,可以继承自一个飞机类,不同种类的鸟,可以继承自飞行动物这一类。

代码实现如下:

Fly接口:

 

Animals的抽象类:

 

 飞机的抽象类:

 

继承自Animals类,实现Fly接口的Bird:

 

继承自Plane类,实现Fly接口的Aircraft类:

 

根据实践,总结抽象类和接口的区别如下:

 

参数 抽象类 接口
默认的实现方法 可以有默认的方法实现 接口完全是抽象的,不存在方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它必须提供抽象类里面的所有声明的抽象方法的实现。非抽象方法则不是必须实现 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public,不可以使用其他修饰符
main方法 抽象类可以有main方法并且可以运行 接口没有main方法
多继承 抽象类可以继承一个类和实现多个接口 接口只可以继承一个或多个其他接口
速度 它比接口速度要快 接口稍微有点慢,因为它需要时间去寻找在类中实现的方法
添加新方法 如果往抽象类里面添加新的方法,可以给它提供默认的实现,因此不需要改变现有的代码。 如果在接口中添加方法,那么必须改变实现该方法的类。
posted on   测试开发喵  阅读(347)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示