欢迎来到天天文库
浏览记录
ID:38676685
大小:949.50 KB
页数:9页
时间:2019-06-17
《抽象类的定义及使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、课程名称:抽象类的定义及使用2、知识点2.1、上次课程的主要知识点对象多态性总结如下:·向上转型(90%):为了实现参数类型的统一,但是向上转型一定要与方法覆写产生关联;·向下转型(1%):为了调用子类特殊的方法实现,但是向下转型前必须要首先发生向上转型,会存在操作的安全隐患,可以使用instanceof进行判断,但是不推荐这样使用;·不转型(9%):为了方便操作直接使用系统类或者是一些功能类,例如:String、简单Java类。2.2、本次预计讲解的知识点1、抽象类的基本定义;2、抽象类的使用原则。3、具体内容(★★★★★★★★★★★)不会抽象类与接口,Java=没学。
2、第(9)页共(9)页3.1、抽象类的基本概念如果说现在在一个类之中需要定义一个没有方法体的方法,那么可以利用abstract关键字来进行抽象方法的定义,而包含有抽象方法的类就可以使用abstract来定义成为抽象类。类的核心组成:属性、方法,但是在学习完继承操作之后,会发现子类存在有一种覆写父类方法的机制,而且这一机制直接与对象的多态性有关。于是这样就会出现一个问题:假设现在使用的是普通类,并且在这个类里面有一个print()方法print()。classA{publicvoidprint(){System.out.println("HelloWorld!");}}但是这个A
3、类在设计之初有一个要求,希望继承它的子类一定要覆写这个print()方法。但事实上,这个时候的子类完全可以灵活的选择是否需要覆写方法。但是由于只是一个普通方法,所以对于子类是否覆写没有任何的要求,于是这样就会出现一个漏洞,父类无法强制要求子类覆写方法。如果只依靠普通类的继承,那么根本就不能够对子类产生限制,所以就可以利用抽象类和抽象方法来解决此类问题。范例:定义抽象类abstractclassA{publicvoidfun(){System.out.println("*******************************");}publicabstractvoidpr
4、int();//没有方法体,使用abstract声明}抽象方法的特点:一个是使用了abstract关键字定义,另外一个是方法的后面没有“{}”,表示没有方法体。范例:错误的使用抽象类publicclassTestDemo{publicstaticvoidmain(Stringargs[]){Aa=newA();}}本处直接采用了关键字new实例化了抽象类对象,但是在程序编译的时候就会出现如下的错误提示信息。抽象类是不能够直接进行对象实例化操作的。因为一旦类的对象实例化了,就意味着可以调用类中的所有方法了,但是抽象方法只是一个声明,并没有具体的方法体。所以在实际的开发之中,对于
5、抽象类的使用原则如下:·抽象类必须有子类,子类利用extends关键字来继承抽象类,一个子类只能够继承一个父类;·抽象类的子类(如果不是抽象类),那么必须要覆写抽象类中的全部抽象方法;·抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。第(9)页共(9)页abstractclassA{publicvoidfun(){System.out.println("*******************************");}publicabstractvoidprint();//没有方法体,使用abstract声明}classBextendsA{publicvoi
6、dprint(){System.out.println("这个方法是强制子类要覆写的方法。");}}publicclassTestDemo{publicstaticvoidmain(Stringargs[]){Aa=newB();//向上转型a.print();//被子类所覆写过的方法}}抽象类与普通类相比最大的好处是强制定义了子类的实现要求。本质上讲抽象类就是比普通类多了一些抽象方法的定义而已。在实际的设计之中,父类的设计是最重要的,普通类与抽象类相比,明显抽象类的约束更加的严格,所以在实际的开发之中,不会几乎不会出现普通类定义子类的情况,大多数都是继承抽象类。3.2、抽象
7、类的相关说明整个的设计结构里面多了抽象类的定义,那么多了一个定义之后,就需要与原始的结构有一些对比。1、抽象类不能使用final关键字来定义,因为抽象类必须有子类,而final不能子类;2、抽象类就是比普通类多了抽象方法而已,但是普通类中的所有结构抽象类都可以定义,包括:普通方法、构造方法、属性、常量等内容,而且子类对戏那个也符合于对象实例化流程,默认先调用父类中的无参构造,而后再执行子类自己的构造。abstractclassA{publicstaticfinalStringINFO="HELLO";p
此文档下载收益归作者所有