《TP继承和多态》PPT课件.ppt_第1页
《TP继承和多态》PPT课件.ppt_第2页
《TP继承和多态》PPT课件.ppt_第3页
《TP继承和多态》PPT课件.ppt_第4页
《TP继承和多态》PPT课件.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章,Java的继承与多态,Java中的继承,学习目标: 继承的概念与实现; 域的隐藏与方法的覆盖; 编译时多态; 运行时多态.,Java中的继承,前面已经讲完了抽象与封装,下面让我们进入面向对象的第二大基本特征 继承的学习。继承是指一个子类通过extends关键字,包含了它父类的属性和方法。 继承的格式: 修饰符 class A extends B 类体代码 其中A是子类,B是父类。,继承,在java中,不支持多继承,也就是说,一个子类,只能继承一个父类。,父类,子类,父类1,父类2,子类,不过,可以利用接口,间接的实现多继承,继承,class Ren public String sizhi; public String pifu; public void chi() System.out.println(“我在吃饭!“); class China extends Ren china(String str) pifu=str; System.out.println(“中国人构造成功,皮肤是“+pifu+“的!“); class Tech3_5 public static void main(String args) China my=new China(“黄色“); my.sizhi=“我也有四肢!“; my.chi(); ,子类与父类的访问控制关系,父类中的public方法在子类中被继承为public; 父类中的protected方法在子类中被继承为protected或private; 父类中的friendly方法在子类中被继承为friendly; 父类中的private的方法不被继承。,this和super关键字,this: 表示对当前对象的引用,不过在静态(static)方法里是没有this的,因为静态数据是所有对象的共享数据区域,不属于任何一个对象。 super: 表示对直接父类对象的引用,可以直接用super.xxx或super.xxx()来调用父类的属性和方法。 注意: this()和super()用在类的构造函数中时,必须是该函数的第一句代码。,域的隐藏与方法的覆盖,域的隐藏:子类重新定义了一个与父类那里继承来的域变量完全相同的变量,子类将使用它自己的重名变量,这称为域的隐藏。 方法的覆盖:指子类重定义从父类继承来的一个同名方法,此时子类将清除父类方法的影响。子类可以通过重新定义与父类同名的方法,实现自身的行为。,方法的覆盖,注意:方法的覆盖也叫方法的重写,它是一种运行时多态。重写所需的条件如下: 方法名相同; 参数列表相同; 返回类型相同; 子类方法的访问控制符范围要大于或等于父类方法的范围; 子类方法的异常范围不能超越父类被重写的方法的异常范围。,隐藏与覆盖举例,class Parent int i = 8; public void show() System.out.println(i); System.out.println(“kkk“); class TestHidden extends Parent int i = 9; public void show() System.out.println(i); System.out.println(this.i); System.out.println(super.i); System.out.println(new Parent().i); System.out.println(“lll“); public static void main(String g) new TestHidden().show(); ,多态,面向对象程序设计的基本特征之三-多态的学习。 多态分为两种类型:1、编译时多态;2、运行时多态。 首先,我们来学习编译时多态,编译时多态指的是方法的重载(overload)。,编译时多态-方法的重载,方法的重载:通过定义同一类中的多个同名的不同方法来实现的;编译时则根据参数(个数、类型、顺序)的不同来区分不同的方法。 重载的条件: 方法名相同; 参数列表必须有所区别; 注意: 返回类型不必相同。,编译时多态,class Juxing_2 int zouchang; int mianji; String str; Juxing_2() System.out.println(“我是无参数的初始化!“); Juxing_2(int a) zouchang=a; System.out.println(“我是有参数的初始化!“); Juxing_2(int a,int b) zouchang=a; mianji=b; System.out.println(“我是参数个数不同的初始化!“); Juxing_2(String a) str=a; System.out.println(“我是参数类型不同的初始化!“); class Tech3_3 public static void main(String args) Juxing_2 my1=new Juxing_2(); Juxing_2 my2=new Juxing_2(5); Juxing_2 my3=new Juxing_2(5,10); Juxing_2 my4=new Juxing_2(“你好!重载构造函数!“); ,练习,编写一个带有TestOverload()函数的类,其中这个函数是个重载函数,通过给这个函数传入的参数个数或类型不同来加以区分,这个函数要完成的功能是,把传入的参数都打印出来,并说明自己被调用了。,练习,class TestOverload public TestOverload() System.out.println(“我是无参数的TestOverload()!“); public TestOverload(int a) System.out.println(a); System.out.println(“我是有一个参数的TestOverload()!“); public TestOverload(int a,int b) System.out.println(a); System.out.println(b); System.out.println(“我是有二个参数的TestOverload()!“); public TestOverload(String a) System.out.println(a); System.out.println(“我是参数类型不同的TestOverload()!“); class Tech3_4 public static void main(String args) new TestOverload(); new TestOverload(5); new TestOverload(5,10); new TestOverload(“重载函数一点都不难.“); ,运行时多态,运行时多态:子类对象作为父类对象来使用。 父类 obj = new 子类(); 注意:一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。,例子,class Ren public void chi() System.out.println(“所有的人类在吃饭!“); class China extends Ren public void chi() System.out.prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论