




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程名称:抽象类的定义接使用 2、知识点 2.1、上次 课程的主要知识点 对象多态性对象如下: 向上转型(90%):为了实现参数类型的统一,但是向上转型一定要与方法覆写产生关 联。 向下转型(1%):为了调用子 类特殊方法实现,但是向下转型前首先发生向上转型,会 存在操作的安全隐患,可以使用 instanceof 进行判断,但是不推荐这 样使用。 不转型(9%):为了操作方便直接使用系 统类或者是一些功能 类,例如:String、简单的 java 类。 2.2、本次 预计讲解的知识点 1、抽象类的基本定 义; 2、抽象类的使用原 则; 3、具体内容( ) 不会抽象类与接口,java= 没学。 3.1、抽象 类的基本概念 如果说现在在 一个类中需要定义一 个没有方法体的 方法,那么可以利用 abstract 关键字了 来进行抽象方法定义,而包含有抽象方法的类就可以使用 abstract 来定义成为抽象类。 类的核心组成:属性、方法,但在学 习完继承操作之后,会发现子类存在一 种覆写父类方法 的机制,而且这一机制直接与对象的多态性有关。于是这样就会出现一个问题:假设现在使 用的是普通类,并且在这个类里面有一个 print()方法。 方法 print(); class A public void print() System.out.println(“Hello World!“); 但是这个 A 类 在设计之初有一个要求,希望继承它的子 类一定要覆写这个 print()方法。但事 实上这个时候的子类完全可以灵活的选择是否需要覆写方法。但是由于只是一个普通方法, 所以对于子类是否覆写没有任何的要求。于是这样就会出一人漏洞。父类无法要求子类覆 写方法。 如果只依靠普通类的继承,那么根本就不能够对子类产生限制,所以就可以利用抽象类和 抽象方法来解决此类问题。 范例:定义抽象类 abstract class A public void fun() System.out.println(“*“); public abstract void print();/没有方法体,使用 abstract 声明 抽象方法的特点:一个是使用了 abstract 关键字定义,另外一个是方法的后面没有”,表示 没有方法体。 范例:直接错误的使用抽象类 public class TestDemo public static void main(String args) A a = new A(); 本处直接采用了关键字 new 实例化了抽象类对象,但是在程序编译的时候就会出现如下的 错误提示信息。 抽象类是不能直接进行对象实例化操作的。因 为类的对象一旦实例化了,就意味着可以 调用类中的 所有方法了,但是抽象方法只是一个声明,并没有具体的方法体。所在实际的开发之中,对于抽象类 的使用原则如下: 抽象类必须有子类,子类利用 extends 关键字来继承抽象类,一个子类只能继承一个父类; 抽像类的子类(如果不是抽象类) ,那么必须要覆写抽象类中的全部抽象方法。 抽象类可以利用对象的向上转型机制,通 过子类对象进行实例操作。 abstract class A public void fun() System.out.println(“*“); public abstract void print();/没有方法体,使用 abstract 声明 class B extends A public void print() System.out.println(“这个方法是强制子类要覆写的方法“); public class TestDemo public static void main(String args) A a = new B();/向上转型 a.print();/被子类所覆写过的方法 抽象类与普通类相比最大的好处是强制定义了子类的实现要求, 本质上讲抽象类就是比普通类多了一些抽象方法的定义而已。 在实际的设计之中,父类的设计 是最重要的,普通 类与抽象类 相比,明显抽象类的约束更加严格。所 以在实际 的开发之中,几乎不会出现普通类定义子类的情况,大多数都继承抽象类。 3.2、抽象 类的相关说明 整个的设计结结构里面多了抽象类的定义,那么多了 一个定义之后,就需要与原始结构有 一些对比。 1、 抽象类不 能使用 final 关 键字定义,因为抽象类必须有子类,而 final 不能子类; 2、 抽象类就是比普能类多了抽象方法而已,但是普通类中的所有结构抽象类都类都可 以定义,包括:普通方法、构造方法、属性、常量等内容,而且子类对象那个也符合于 对象实例化流程,默认先调用父类中的无参构造方法,而后再执行自己的子类构造 abstract class A public static final String INFO=“HELLO“; public A() this.fun(); public void fun() System.out.println(“*“); public abstract void print();/没有方法体,使用 abstract 声明 class B extends A public void print() System.out.println(“这个方法是强制子类要覆写的方法“); public class TestDemo public static void main(String args) A a = new B();/向上转型 a.print();/被子类所覆写过的方法 范例:思考题 abstract class A public A() / 2、默认调用父类构造 this.print();/3、调用 print()方法 public abstract void print();/没有方法体,使用 abstract 声明 class B extends A private int num = 50 ; public B(int num)/1、传递内容过来,在子类实例化前先实例化父类对象 this.num = num; public void print()/4、调用此方法 执行,但是此时子类对象还未实例化,但内容没有赋值 System.out.println(“num=“+this.num);/5、只能够输出对应数据的类型默认值 public class TestDemo public static void main(String args) new B(100); 本程序解决关键思路:子类对象实例化前一定要先实例化父类对象,也就是说此时,子 类对象属性都 没内容, 3、 抽象类中可以没有抽象方法,但依然不可能使用关键字 new 进行对象的实例化操作; abstract class A public class TestDemo public static void main(String args) A a = new A(); 因为类 A 上存在有 Abstract 关键字,所以此处无法进行对象的直接实例化。 4、 外部抽象类上不 允许使用 static 声明,但是内容部抽象 类中可以使用 static 声明,这样表明 的是一个外部抽象类。 范例:定义普通的内部抽象类 abstract class A public abstract void printA(); abstract class B public abstract void printB(); class X extends A public void printA(); class Y extends B public void printB() 范例:在内部抽象类中使用 static 关键字 abstract class A public abstract void printA(); static abstract class B public abstract void printB(); class X extends A.B public void printB() 5、 抽象类中可以存有 static 方法,而且 static 方法不受实例化对象的控制。 范例:直接通过抽象类产生实例化对象 abstract class A/此类设计之初考虑到 N 年后的发展,需要有子类,但是 N 年前不需要子类 public abstract void printA(); private static class B extends A/在 A 类里面直接定义实现的子类 public void printA() System.out.println(“Hello World.“); public static A getInstance() return new B(); class C extends A public void printA() System.out.println(“*“); public class TestDemo public static void main(String args) A a = A.getInstance(); a.printA(); A a1 = new C();/留给用户做的 a1.printA(); 日后如果发现,在系统库中有某个抽象 类可以直接利用一个 static 方法取得实例化对象的时候不要 觉得陌生。 以上出现的几种形式有一些是在后面讲解系统类库中会出现的问题,现阶段看看就完了。 3.3、抽象 类实际应用 模板 设计模式 清楚了抽象类产生动机以及抽象类的使用之后,下面就必须搞清楚一个问题,抽象类与普 通类到底有哪些区别? 现在假设有三个物种: 机器人:补充能量 + 工作; 人 :吃饭 + 工作 + 睡觉; 猪:吃 + 睡 觉; 现在要求实现一种命令的模式,不管是何种物种,只传递指定的指令就可以进行操作。 范例:实现程序操作 abstract class Action /定 义的是行为,行为一定不是具体的 public static final int EAT = 1; public static final int SLEEP = 2; public static final int WORK = 5; public void command(int flag)/执行命令 switch(flag) /数 值用 switch 判断最好 case EAT: this.eat(); break; case SLEEP: this.sleep(); break; case WORK: this.work(); break; public abstract void eat();/因 为这些具体的行为如何执行不知道 public abstract void sleep();/交由子类根据自己的实际情况完成 public abstract void work(); 范例:定义子类 class Robot extends Action public void eat() System.out.println(“机器人补充能量。 “); public void sleep() public void work() System.out.println(“机器正在工作.“); class Person extends Action public void eat() System.out.println(“人在吃饭。“); public void sleep() System.out.println(“人在休息“); public void work() System.out.println(“人在努力工作。“); class Pig extends Action public void eat() System.out.println(“猪在啃食槽。“); public void sleep() System.out.println(“猪在养膘“); public void work() 不同的子类有着自己不同的操作支持。 范例:程序测试 public class TestDemo public static void main(String args) fun(new Pig(); System.out.println(“*“); fun(new Robot(); System.out.println(“*“); fun(new Person(); public static void fun(Action act)/接收的是行为 act.eat(); ac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境采样员技能培训课件
- 2025年PCB感光油墨项目发展计划
- 森林火灾风险评价与防范措施考核试卷
- 名片设计排版
- 老年人日常生活能力训练方法考核试卷
- 数字智慧方案5488丨如何提升企业信息化管理能力
- 蔬菜种植的土壤健康与生物多样性考核试卷
- 病房护理团队合作与沟通考核试卷
- 西乐器生产中的质量管理体系考核试卷
- 2024年工地开复工肺炎疫情防疫方案
- 肾移植与术后感染
- 浙江省杭州市2023年中考英语试题(附真题答案)
- 孕妇与乳母的饮食与睡眠质量
- 食品原料采购协议书
- 建筑物防火卷帘门的保养与维修
- 物品的交接单
- 采购管理中的原材料采购合规性审查
- 2024年山东省春季高考技能考试汽车专业试题库-下(判断题汇总)
- 慢性肾衰竭的中医诊疗现状
- 专题08 一元一次不等式(组)应用的两种考法(学生版)-2023年初中数学7年级下册同步压轴题
- 城镇排水管道检测记录表、缺陷图图例、检测成果表、等级划分及样图
评论
0/150
提交评论