欢迎来到天天文库
浏览记录
ID:51488762
大小:150.00 KB
页数:33页
时间:2020-03-24
《Java面向对象编程(3-3).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第三章 面向对象编程3软件工程学院主讲人:张昊13.8多态什么是多态JAVA里没有多继承,一个类只能有一个父类。一个父类可以有多个子类,而在子类里可以重写父类的方法,每个子类里重写的代码不一样。这样用父类的变量去引用子类的实例,在调用相同的方法时得到的结果不一样,这就是多态,也就是调用相同的方法会有不同的结果。2Java语言允许用父类的变量去引用子类的实例。Animalxiaohuang=newDog();//父类变量animal引用一个Animal子类Dog的实例我们称Animal是xiaohuang的声
2、明(形式)类型Dog是xiaohuang的实际类型。Animalxiaohua=newCat();//父类变量xiaohua引用另一个Animal子类Cat的实例用父类的变量去引用子类的实例3例1:publicclassFather{//父类publicvoidhitChild(){//父类有一个打孩子方法}}publicclassSon1extendsFather{//子类1//重写父类打孩子方法publicvoidhitChild(){System.out.println("为什么打我?我做错什么了
3、!");}}publicclassSon2extendsFather{//子类2//重写父类打孩子方法publicvoidhitChild(){System.out.println("我知道错了,别打了!");}}publicclassSon3extendsFather{//子类3//重写父类打孩子方法publicvoidhitChild(){System.out.println("我跑,你打不着!");}}4例1://测试类publicclassTest{ publicstaticvoid
4、main(Stringargs[]){Fatherfather;father=newSon1();father.hitChild();father=newSon2();father.hitChild();father=newSon3();father.hitChild();}}都调用了相同的方法,出现了不同的结果!这就是多态的表现!5【3.12】ClassSuperClass{voidmethod1(){System.out.println(“method1inSuperClass”);}voidmeth
5、od2(){System.out.println(“method2inSuperClass”);}}classSubClassextendsSuperClass{voidmethod1(){System.out.println(“method1inSubClass”);}voidmethod3(){System.out.println(“method3inSubClass”);}}6classMain{publicstaticvoidmain(Stringargs[]){SuperClassa=newSub
6、Class();//声明类型为SuperClass,实际类型是SubClassa.method1();//method1inSubClass,SubClass对SuperClass中的method1进行了重写a.method2();//method2inSuperClass,SubClass中没有method2,只能调用SuperClass的method2//a.method3();错误}}7如果我们调用a的method3()方法,则无法通过编译。这是因为java语言为强制类型的语言,编译时会检查形式类型是
7、否提供该方法。a的形式类型是SuperClass,不提供method3()方法,虽然a的实际类型有method3()方法,但编译时只检查形式类型,不检查实际类型。所以形式类型也称为编译期类型,实际类型也称为执行期类型。注意:8注意:通常我们不会去写“SuperClassa=newSubClass();”但实际应用中,形式类型和实际类型不同的情况却往往在不知不觉中发生。看下例:9【例3.13】classOther{staticvoidmethod4(SuperClassa){//a的形式类型是SuperCla
8、ss,实际类型则不一定是SuperClassa.method1();}}publicclassMain{publicstaticvoidmain(String[]args){SubClassb=newSubClass();Other.method4(b);//相当于SuperClassa=newSubClass();}/*调用类方法method4(),需要一个SuperClass类型的参数,而传入的参数b的实际类
此文档下载收益归作者所有