抽象类(核心)
来源:互联网 发布:qq三国hj和js 编辑:程序博客网 时间:2024/05/16 10:01
在以后的的开发中,一个类不要继承一个已经实现好的类,只能继承抽象类或实现接口;
一、抽象类基本概念
之前所学的都输于普通类,普通类的特征是:类的结构很完整,而且可以直接产生实例化并使用。在普通类之中所定义的方法都是具备方法体的“{ }”,但若现在一个类中的某些方法希望强制子类进行覆写,则可以将其定义为抽象方法,抽象方法使用“abstract”关键字声明,而且声明时没有方法体,而包含抽象方法的类就被称为抽象类,抽象类也要使用abstract关键字定义;
范例1:定义抽象类
抽象类定义完后并不能像普通类那样直接使用关键字new进行对象实例化操作(但是可以声明抽象类对象)
因为一旦一个类的实例化对象产生了,就意味着可以通过此对象调用类中的方法,可是抽象方法没有方法体,所以无法调用。
1. 抽象类使用原则:
1)抽象类一定要被子类所继承;
2)抽象类的子类(如果不是抽象类)则必须覆写抽象类中全部的抽象方法(强制覆写)
3)抽象类可以通过子类对象的向上转型实现类对象实例化操作;
范例2:
可以发现抽象类就是比普通类多了抽象方法的定义,但是在进行继承关系操作的时,可发现比普通类具备更强的制约性,即:抽象类的子类必须有明确的方法覆写要求,普通类没有
2. 抽象类注意事项
1)抽象类在定义时不可使用final关键字,因为抽象类必须有子类;
2)抽象类中可以定义构造方法,因为抽象类只是比普通类多了抽象方法而已,其他的 结构(属性、全局常量、普通方法)全存在,既然存在属性了一定会存在构造方法
3)抽象类可以没有抽象方法,此时依然无法直接产生抽象类的实例化对象。
4)抽象类是否可以使用static定义
*若定义的是一个普通的外部类,无法使用static来定义抽象类
*若定义的是一个内部类,那么就可以使用static;因为使用static定义的内部类就成 为了一个外部类;
5)一个抽象类可以在此抽象类的内部提供实现此抽象类的子类;
范例3解释第4条
范例4:解释第5条在内部实现本类对象的操作形式
此时A类是无法进行对象实例化的,但是只有static方法可以不受类实例化对象的控制;
应添加为:
一般而言使用此类代码只有一个目的:不希望用户关注到此类的存在;
二、抽象类应用——模板设计
抽象类不是一个具体类,只是一个半成品,而子类负责实现这些未实现的功能;
实例5:
需求有三个按钮,每按一个按钮表示一种操作,现在提供三种操作吃饭、睡觉、工作,现在又有三类事物:
猪=吃饭、睡觉
机器人=吃饭、工作
人=吃饭、睡觉、工作
代码实现:
1. 定义抽象类
如果要想让三个不同的事物可以通过commond()进行操作,那么就必须继承Action类,同时根据需要覆写方法
2. 定义子类Person,pig,robot类,继承抽象类并覆写抽象类的全部抽象方法
3. 测试代码
如果要想正常的进行操作,就必须按照抽象类提供的要求实现,也就是说此时的抽象类提供给我们的一个操作模板;根据模板实现子类的定义。在学习servlet技术时在继续学习设计模式。
项目中可以没有抽象类,但是必须有借口;
- 抽象类(核心)
- 接口与抽象类(java核心卷1-D6)
- 抽象类和接口的核心区别
- 类的继承与抽象类(Java核心卷1-D4)
- JMeter核心抽象
- .NET对接口和抽象类的核心比较(转)
- 核心java系列——接口和抽象类
- Java(抽象类与抽象方法)
- 抽象类(abstract)
- 抽象类(abstract)
- 抽象类(abstract)
- 抽象类(C++)
- 抽象(abstract)类
- 抽象类(abstract)
- 06-抽象(类)
- 硬件抽象层(HAL),android原生库和核心API(系统运行层)
- 抓住业务核心,避免过度抽象
- C#抽象类与抽象方法(抽象类,抽象方法概念,使用)
- SparkStreaming例子
- Struts2 版本不一致导致的问题
- Windows下使用xShell向阿里云ecs服务器上传文件
- 内部类
- C语言external-internal-none链接属性浅析
- 抽象类(核心)
- 高端 --- 魔兽登陆
- 最简单的基于FFmpeg的推流器(以推送RTMP为例)
- 《Android开发艺术探索》第1章读书笔记
- Sources for 'Android API 25 Platform' not found
- CentOS 7安装KVM
- iOS NSString 与NSData转化
- Stemming the words and word lemmatization —— Python Data Science CookBook
- 2017.2.10【初中部 GDKOI】模拟赛B组