抽象类
抽象类(abstract)
在编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体。但在某些情况 下,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如何实现这些方法。例如,现有一个动物类Animal,不同的动物的运动方式是不一样的,老虎是跑的,青蛙是跳的,鸟儿是飞的...... 而运动 Move( ) 这个方法在Animal 中不知道该如何实现,可以将其定义为抽象方法。当类中含有一个或多个抽象方法时,这个类就必须声明为抽象类。也就是说,抽象类比一般的类更具有一般性。
定义抽象类的关键字:abstract
几点注意事项与使用:
1)抽象类不能被实例化,但可以被继承。(这一点与final相反)
2)抽象类可以定义一个抽象类的对象变量,该对象变量只能引用非抽象子类的对象。(向上转型)
3)抽象类可以没有抽象方法,但是抽象方法必须存在于抽象类中。
4)抽象类可以拥有任意类的五大成员(非抽象方法,构造器,静态属性等,因为其本质还是类)。
5)关键字 abstract 只能修饰类和方法,不能修饰其他成员(属性,构造器等)。
6)抽象方法是没有类体的,大括号就是方法的类体。即:抽象方法连大括号都不能有。
7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract 类。(实现抽象方法,即:在子类中重写抽象类的抽象方法,且重写的方法不能是抽象方法,除非你把子类也声明为abstract类。)
8)抽象方法不能用private修饰符和final、static关键字,因为这三者均不能被重写。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用