ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:427.10KB ,
资源ID:29081216      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29081216.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版零基础学JAVAJavaSE面向对象部分16面向对象高级04.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版零基础学JAVAJavaSE面向对象部分16面向对象高级04.docx

1、完整word版零基础学JAVAJavaSE面向对象部分16面向对象高级04上季内容回顾:1、 final 关键字修饰类不能被继承修饰方法不能被覆写修饰的变量就是一个常量,全局常量( public static final )2、 抽象类和接口抽象类:只包含一个抽象方法的类,抽象方法只需声明而不需要实现,必须有子类接口:只包含抽象方法和全局常量的类一一接口,也是必须有子类在实际中一个类很少会去继承一个已经完全实现好的类, 基本上都是继承抽象类和实现接口。本季主要知识点:1、 对象的多态性2、 instanceof 关键字3、Object 类 对象的多态性 对$仃乂逻恥上M W f换e rxui向

2、父炎对探转换(向上龟 址英対象血子逆对徹杞挽 向厂金 强引討力4孑史洞蔑=广子貴址宝址滋注意点: 为了清楚的阐述出概念,现在先使用普通类的继承关系。向上转型:class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();pub

3、lic void fun 3()System.out.println( B 类= public void fun3();public class Demo01public static void main( Str ing args)B b = new B();A a = new A();b.fu n1();a.fu n2();b.fu n3();H:jauax)oi1javac De no 01H=5public uoidl nnl J1Fl类=pufcliG void funlOB=-=puI)lic vofunGOE 二 Xjmu曰、dcj4class Apublic void fun

4、1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()System.out.println( B 类= public void fun3();public class Demo02public static void main

5、( Str ing args)/声明一个父类对象A a = null ;/new B()是子类对象向父类对象转换a = new B();a.fu n1();现在我们来看下a.fu n1()调用的是哪个类的方法哈E: jauiQo4Jauac Deno2 .JavaE : jauaooi1jaua DcmcO2B类冶ulilic; void funlOE 二 Xjgujaiou4.class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法th

6、is .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()System.out.println( B 类= public void fun3();public class Demo02public static void main( Str ing args)/声明一个父类对象A a = null ;/new B()是子类对象向父类对象转换/子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方

7、法 a = new B();a.fu n1();a.fu n2();E: jaua-ot)4Jauac Den)oB2 .JavaE: jauaXjoo4Ju Demo02 B=pijihlic uoipul)lic voii funl向下转型:class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()Syst

8、em.out.println( B 类= public void fun 1();public void fun 3()System.out.println( B 类= public void fun3();public class Demo03public static void main( Str ing args)/声明一个父类对象A a = null ;/new B()是子类对象向父类对象转换/子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法现在我们来看下能否调用 a.fu n3()哈ncno03.jaua:3b:找不到荷号 隠寻方法皿切Kfi;类 fi41错误E : ja

9、uaXoo4程序提示找不到fun3()方法,A类中没有fun3()方法哈,如果我们一定要调用的话,我们 就要使用向下转型哈class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()Sy

10、stem.out.println( B 类= public void fun3();public class Demo03public static void main( Str ing args)/声明一个父类对象A a = null ;/new B()是子类对象向父类对象转换/子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法 a = new B();/可以进行向下转型,需要使用强制性手段哈 B b = (B)a;b.fu n3();验证下效果:E J*vaoo4 De no 03. javaE; Muao jaua De no 03B= = public uoid. fun3E

11、 i XjAuaoo4_这就是对象向下转型哈观察以下一种代码,检查下有没问题哈 :class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是funl方法this .fun 1();class B extends A/现在我们不覆写 A类中的fun 1()方法public void fun X()程序找不到B类中被覆写的fun 1()方法,所以去查找父类 A中的fun 1()方法了哈E:Xiauaoo4Jauac Dema04.java!j*uaooBe

12、no04 public void funlE : xjauaot)4class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()E:Jauac Demo04.jdtuAE = jjav*

13、 Icno941 类=Mpul)lic void funlOE: XjauaXoo4_如果现在我们要调用 fun3()方法呢?现在使用向下转型可以吗这样修改的话,我们看下有没问题哈,验证一下,发现编译时没有错误,但执行时却出现ClassCastException 错误了哈 E:口*1 vac le - j:昂 vaE: 7鼻啪事7v* PegHEnrvpt ion in thrafld ftajau aa LangaC1aE: 鼻1在程序开发中有两大错误是比较常见的:NullPointerException :表示空指向异常,如果没有开辟堆内存空间,则出现此异常ClassCastExcepti

14、on :表示类转换异常,两个不相关的类的对象进行向下转型操作。上面一个解释比较难理解哈, 我们光看A类的话,我们不能知道 A类有什么子类哈,但是如果我们光看B类的话,我们可以看出 B类是继承A类的话,所以得出了下面一个结论。结论:在进行向下转型之前,两个对象必然先发生向上转型关系,这样好建立起关系,否则两个没有关系的对象是不能相互转型的。对象多态性到底有那些用处呢?如果不知道多态性的时候应该使用以下的方式编写代码,利用方法的重载完成。class Apublic void fun 2()fun2 方法调用的是funl方法this .fun 1();class B extends A/覆写A类中的

15、fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()System.out.println( B 类= public void fun3();class C extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( C 类= public void fun 1() );public void fun 4()System.out.println( C 类= public void fun4();pu

16、blic class Demo05public static void main( Str ing args)fun( new B();fun( new C();/现在要求定义几个方法,可以接收父类 A的子类对象/如果不知道多态性的时候应该使用以下的方式编写代码public static void fun(B b)b.fu n2();E ! jauaoo4jauAC . JauaB=fjublic void funlO C=public uo id funi E J Xjauaoo4如果按此做法,就会面临一个很严重的问题:如果现在A类有30个子类,则方法要重写 30遍。所以此时就可以利用对象的

17、多态性完成,因为所有的子类对象都可以向父类对象转换。现在我们就只留一个 fun()方法,new B() , new C()都是A类的子类哈,所以现在不管调用时传什么子类,都调用所传子类被覆写的 fun 1()方法哈这就是对象多态性带来的好处,谁被其实例化就具备这样的功能哈 如果父类设计的非常的完善,则方法中会非常的好写。已弓百DemoBGXjavaoo4j*UHa Deno06 =puhlic void funl =pui)lic void funl public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();cl

18、ass B extends Apublic void fun 3()System.out.println( B 类= public void fun3();/覆写A类中的fun 1()方法public void fun 1()System.out.println( C 类= public void fun 1() );public void fun 4()我们来判断下对象 b是否是A类的实例哈,我们分析下哈,子类B可以直接向父类 A转型哈,说明父类A可以接收子类B的实例,那两者必然有关系哈,我们验证一下,结果返回 true哈,证明对象b是A类的实例哈E = Beno07力霾#目E:DenoB?

19、trueE: System.out.println( B 类= public void fun3();class C extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( C 类= public void fun 1() );public void fun 4()System.out.println( C 类= public void fun4();public class Demo07public static void main( Str ing args)B b = new B();System.out.pri n

20、tln(b in sta nceof A);System.out.pri ntln(b in sta nceof B);对象b也肯定是B类的实例哈E:jauac DenoB7.JavaE:javaooBemoO? truetrueclass Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();那相反对象a是B类的实例吗?验证显示不是哈 说明不能向子类转换哈 E:jauJauac DemoB7.Ja.uaE;Xjauao

21、o4J*u BemoB? trueFalseE: jauaXDo4class Apublic void fun 1()System.out.println( A 类= public void fun 1();public void fun 2()fun2 方法调用的是fun1方法this .fun 1();class B extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( B 类= public void fun 1();public void fun 3()System.out.println( B 类= publi

22、c void fun3();class C extends A/覆写A类中的fun 1()方法public void fun 1()System.out.println( C 类= public void fun 1() );public void fun 4()System.out.println( C 类= public void fun4();public class Demo08public static void main( Str ing args)fun( new B();System.out.pri ntl n( # );fun( new C();public static v

23、oid fun(A a)a.fu n2();这就是instanceof 关键字的作用哈Ez jauaio4Javc Deno68 , jauaE: jauao4jaua BenoSS B-=-pul)lic Jo il funi piit)lic uci id fun3 C=pul)lic uo ipijihlic uoil fun4javacE: De no S?Scudent0757aefE=加和不加都是一样滴,那我们下面就覆写 Object类的toString() 方法哈class Student /extends Objectprivate Str ing n ame;private int age;public Student(String name, int age)this .name = name;this .age = age;public String toStri ng()return Michael;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1