《继承与多态ppt课件.ppt》由会员分享,可在线阅读,更多相关《继承与多态ppt课件.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、继承与多态ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望l继承l继承基本类l继承的成员变量、方法。l覆盖父类的方法:重写(访问权限、参数、名称)。l覆盖父类的变量。l多态l动态绑定l多态与动态绑定l重载与类型判断目标Tel:0571-88394222 QQ;理解继承1.1.父类、子类和继承父类、子类和继承l定义:定义:子类子类:继承而得到的类为子类。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为 父类父类:被继
2、承的类为父类,父类包括所有直接或间接被继承的类 Tel:0571-88394222 QQ;父类、子类和继承父类、子类和继承lJava语言是单继承机制,不支持多重继承l单继承是代码更加可靠。l抽象类使用extendsl接口可以提供多继承功能。implementsl Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的。Tel:0571-88394222 QQ;动物动物 猫猫 狗狗 马马Object默认继承Tel:0571-88394222 QQ;l创建子类创建子类通过在类的声明中加入extends子句来创建一个类的子类,其格式如下:class SubClass ex
3、tends SuperClass 说明:说明:如果缺省extends子句,则该类为java.lang.Object的子类Tel:0571-88394222 QQ;子类能够继承什么?子类能够继承什么?l父类中public和protected的成员。l子类能够继承父类中没有访问控制(默认)的成员,只要子类和父类在同一个包内。子类不能够继承什么?子类不能够继承什么?l父类中private成员方法。l子类不能继承父类中构造方法。l构造方法没有继承的间接的多重继承(多层继承)非多继承。间接的多重继承(多层继承)非多继承。Tel:0571-88394222 QQ;l分配成员变量的存储空间并进行默认的初始化
4、。l调用构造函数l构造函数可以调用其他的构造函数this(),默认无参数的。如果未定义,则系统有默认的。l默认调用super()。除非显示调用其他的super(int num)。l调用是且只是第一行。Tel:0571-88394222 QQ;重写、隐藏(覆盖)重写、隐藏(覆盖)l变量的隐藏:变量的隐藏:l子类中声明了和父类同名的变量,父类的成员变量被隐藏。l方法的重写:方法的重写:l子类中定义了与父类相同的方法,则父类的方法被重写。重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型l重写的方法有比父类更具体的行为l子类通过成员变量的隐藏和方法的重写可以把父类子类通过成
5、员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为的状态和行为改变为自身的状态和行为Tel:0571-88394222 QQ;重写lClass AnimallString name;lPublic void sound()lSystem.out.println(“animal sound”);lllClass Dog extends AnimallString name;/子类声明时覆盖lPublic void sound()/重写方法lSystem.out.println(“wa.”);llPublic void sound(String name)lSystem.out.
6、println(“重载sound 方法。“);llTel:0571-88394222 QQ;super用来引用当前对象的父类对象,super来实现对父类成员的访问。应用:应用:l子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员l在重写的方法中使用父类中被重写的方法以简化代码的编写superTel:0571-88394222 QQ;lpublic class Father_baby extends Father lString num=baby num;lpublic void sound()lSystem.out.println(“baby sound.”);/子类自己的
7、实现体子类自己的实现体lsuper.sound();/调用父类的调用父类的sound方法。方法。lSystem.out.println(num);/子类中的子类中的numlllpublic class Father lint num;lpublic void sound()lSystem.out.println(father sound.);llTel:0571-88394222 QQ;当子类对象进行初始化时,先调用父类的构造函数,再调用自己的构造函数l子类继承父类的成员变量、方法。若先调用子类,子类若用到父类中定义的信息,则会出错。说明:说明:l用来调用父类的构造函数super(paraml
8、ist)必须放在子类构造方法的句首。l如果子类没有明确的调用父类的构造函数,编译器会自动的调用super()语句,它调用父类的默认构造函数。l如果父类没有不带参数的构造函数则编译出错。继承中的构造函数调用Tel:0571-88394222 QQ;多态定义定义:多态是指不同的类对象收到同一消息可以产生完全不同的响应。多态是指不同的类对象收到同一消息可以产生完全不同的响应。实现实现 通过子类覆盖父类的成员方法的方式实现。通过子类覆盖父类的成员方法的方式实现。l继承l重写l父类声明子类实例化l父类调用Tel:0571-88394222 QQ;对于重写或继承的方法,Java运行时系统根据调用该方法的实
9、例的类型来决定选择哪个方法调用。Tel:0571-88394222 QQ;说明:l对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法,l如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。Tel:0571-88394222 QQ;例:class Avoid callme()System.out.println(Inside As callme()method);class B extends Avoid callme()System.out.println(Inside Bs callme()method);public class Dispatchpublic
10、 static void main(String args )A a=new B();a.callme();/输出:Inside Bs callme()methodTel:0571-88394222 QQ;绑定绑定l早期绑定l将一个方法调用同一个方法主体连接到一起就称为“绑定”Binding。若在程序运行前执行绑定(由编译器和链接程序完成如果有的话)。l动态绑定l解决的办法就是“后期绑定”,它意味着绑定是在运行时间进行,以对象的类型为基础。后期绑定也叫作“动态绑定”或“运行时间绑定”。若一种语言实现了后期绑定,那么同时还要提供一些机制,以便在运行时间正确判断对象类型,并调用适当的方法。也就是说
11、,编译器此时仍然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。lJava的所有方法绑定都采用“后期绑定”技术,除非一个方法已被明确声明成final。也就是说,我们通常不必关心是否会进行后期绑定它是自动进行的。在运行时去找方法,而不是编译或者链接时。在运行时去找方法,而不是编译或者链接时。Tel:0571-88394222 QQ;其他lObjectlFinall类的初始化l重载Tel:0571-88394222 QQ;l类java.lang.Object处于Java开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类l一个类如果没有声明继承某个类,则默认继承Obje
12、ct类。publicclassEmployee.等价于:publicclassEmployeeextendsObject.java.lang.ObjectTel:0571-88394222 QQ;该类定义了一些所有对象最基本的状态和行为常用的有:1.equals()2.getClass3.toString4.finalize 5.notify 6.notifyAll 7.wait Tel:0571-88394222 QQ;final数据、方法和类数据、方法和类1.final数据数据l它可以是编译时的常量l它可以是运行时才初始化的常量l只可以一次性赋值Tel:0571-88394222 QQ;2
13、.final方法方法有些方法不能被重写,这时把它限定为final方法,其格式为:Public final void sound()System.out.println(“final method”);Tel:0571-88394222 QQ;final类不能被不能被继继承承。有时候希望一些类不能被继承l安全性的原因:安全性的原因:如Java中的String类,integer,Float,Booleanl面向面向对对象的象的设计设计上的考上的考虑虑:如果你认为一个类的定义已经很完美,不需要再生成它的子类,这时也应把它修饰为final类final class Father int i=7;int
14、j=1;void sound()class Son extends Father /error Tel:0571-88394222 QQ;Final 与 继承l 子类进行方法的重写时,不能使用比父类中被重写的方法更严格的访问权限。lfinal关键字final标记的类不能被继承。final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。(final标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,以后才能使用)。在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的声明周期超出方法
15、运行的生命周期。Tel:0571-88394222 QQ;练习l在Student类添加一个代表学生毕业时间的属性,以形成一个Student的子类:CollegeStudent。Student毕业时间为当前时间,CollegeStudent毕业时间比student的毕业时间推后1个月。请在CollegeStudent中打印两个毕业时间。l所有的电器都有用电的方法,电视也用电,但是还可以放电影,手机电视还可以打电话。利用继承关系实现。Tel:0571-88394222 QQ;l两个小女孩分别养了猫和狗,猫和狗继承了类:动物。让各小女孩家的宠物叫一声。l创建员工类,里面有工资的属性。小时工是员工的子类,里面也有工资的属性。两个属性的类型和变量名称都相同。员工类中有返回工资的方法,小时工重写了该方法,但返回自己的工资,还可以输出员工工资。(员工和小时工的工资计算方式不同,即返回工资方法的实现不同)Tel:0571-88394222 QQ;l演唱会演出,歌手唱歌,舞者跳舞。(提示:歌手和舞者都是人,继承了类:人;演唱会中只有人。)Tel:0571-88394222 QQ;联系方式l杭州和盈科技公司lAddress:潮王路238号银地大厦2FTel:0571-88394222 QQ;106159278
限制150内