您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第07讲_继承、多态、抽象类、接口(总结)
继承、多态、抽象类、接口(总结)1.继承:注意事项1、所有的类都派生自java.lang包中的Object类2、当一个类从另一个类继承,子类将继承父类中除了构造函数之外的所有成员变量和成员方法。3、在Java中,派生类只能从一个类继承,也就是所谓的单继承。(再直白一点说就是:一个类只能有一个父类。)1.2继承:方法覆盖1、在子类中,如果我们觉得从父类中继承过来的方法不能满足子类的要求,我们可以编写一个与父类相同的方法,这就是继承中的方法覆盖。2、子类中覆盖的方法的访问控制权限要“大于”父类中被覆盖方法的访问控制权限。也就是说,如果父类中的被覆盖的方法的访问控制权限是protected,那么子类中覆盖的方法的访问控制权限可以是protected或public,但不能为private1.2方法重载与方法覆盖的区别重载:1、发生在同一个类或继承关系中2、方法名相同、参数的个数/顺序/类型不同。覆盖:1、发生在继承中,子类覆盖父类的方法。2、方法的名称、形参、返回类型要求完全一样,访问修饰符必须比父类中的访问修饰权限要大。1.3多态:什么是多态1、子类可以以父类的身份出现。Studentstu=newUniversityStudent(“003”,“连晋”,90,“会计);我们创建了UniversityStudent(“大学生”对象),然后将Student(学生)类型的引用stu指向刚创建的UniversityStudent对象。就好像:如果“男人”从“人”继承,那么“人”就是“男人”的父类,那么“男人”就可以“人”的身份出现,也就是说“男人”是一个人这样的说法成立。但反过来就未必成立。2、在实际调用过程中,调用的是内存中真实创建的对象。还是上面的例子,如果父类Student中有一个print()方法,子类UniversityStudent中覆盖了父类的print()方法,那么我们在调用stu.print()的时候,实际上调用的是子类UniversityStudent中的print()方法。具体的解释,请看下一页ppt3、对象的引用类型,限定了该引用能调用到的该对象成员的范围。1.3多态:1、“多态”是通过“派生类”覆盖“基类”中的方法来实现的2、多态的意义:用一种方法,解决派生类的不确定性。1.3为了解释多态,接下来我们来看一个例子:1.classA2.{3.publicvoidprint1()4.{5.System.out.println(A'smethod:print1());6.}7.publicvoidprint2()8.{9.System.out.println(A'smethod:print2());10.}11.}12.classBextendsA13.{14.publicvoidprint2()15.{16.System.out.println(B'smethod:print2());17.}18.publicvoidprint3()19.{20.System.out.println(B'smethod:print3());21.}22.}staticvoidmain(string[]args){Aa=newB();a.print2();}当主函数执行如下代码时:程序执行结果如下:这就是多态!可为什么会是这样呢?接着往下看^_^1.3图解多态原理堆栈aAPrint1()Print2()Print3()B对象Print2()从A中继承的方法Attention:-------------------------------1、引用a所能调用到的成员只能是类A中所定义的成员,也就是说可以调用:a.print1(),a.print2(),但是不能调用到print3()方法,因为该方法在A类中没有定义。2、因为B类覆盖了从A类继承过来的print2()方法,所以调用a.print2()实际上调用的是覆盖后的方法。覆盖后的方法1.4抽象类一、什么是抽象方法?1、使用abstract修饰符修饰的方法为抽象方法。2、抽象方法只有方法的定义,没有方法体。3、抽象方法必须写在抽象类中。1.4抽象类二、什么是抽象类?1、包含抽象方法的类是抽象类。2、抽象类不能实例化(即不能创建抽象类的对象)。三、抽象类的意义:提供“派生类”可共享的“基类”的公共定义,其主要的作用是用于继承,规定“非抽象派生类”必须实现的方法。1.5接口的定义例如:-------------------------------------------------------interfaceFlyable{voidfly();}第1行:使用interface关键字声明了一个名称为Flyable的接口第3行:该接口中有抽象方法fly(),该方法返回类型为void1.5接口小结1、一个类可以实现多个接口,多个类也可以实现同一个接口。2、接口自身可从一个或多个接口继承。3、一个类实现一个接口,如果没有实现该接口中所有的抽象方法。则该类是一个抽象类。(因为如果有1个抽象方法没有覆盖,该类就包含了抽象方法,因此是个抽象类)4、接口中的所有成员方法都是抽象方法,而且都是publicabstract的,因此,可以不用写publicabstract,当然写了也不会出错。5、接口中可以有成员变量,但接口中的成员变量都是“全局静态常量”,即都是publicstaticfinal类型的成员变量,因此在接口中定义的成员变量的时候可以不写publicstaticfinal,当然写了也不会出错。1.5接口1、为什么接口中的所有成员方法都是抽象方法,而且都是publicabstract的?2、为什么接口中的成员变量都是publicstaticfinal类型的“全局静态常量”。JAVA里面的接口其实是各个类对外公布的一种协议规则,所以必须是public的,接口中的方法主要是让别的类去实现的,因此都是抽象方法。1.5接口与抽象类的比较相同点:1、都是一种类型,当一个类从一个基类继承,并实现多个接口时,该类可以以它的父类或所实现的接口类型出现。2、都不能实例化,它们的作用主要是供子类继承或实现的。不同点:1、一个类可以实现多个接口,但只能从一个基类继承。2、定义接口中的抽象方法时可以不需要使用abstract关键字和访问修饰符(当然你也可以写),而抽象类中定义抽象方法时必须使用abstract关键字和访问修饰符。3、抽象类可以有非抽象方法,而接口则不可以。1.5接口与抽象类的使用建议1、当在差异较大的对象间寻求功能上的共性时,使用接口;当在共性较多的对象间寻求功能上的差异时,使用抽象类,以方便代码共用和扩展。2、设计小而简练的功能块,则使用接口。如果设计大的功能单元,则使用抽象类
本文标题:第07讲_继承、多态、抽象类、接口(总结)
链接地址:https://www.777doc.com/doc-3270021 .html