第06讲Java继承、多态.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第06讲Java继承、多态

继承、多态 继承、 多态 面向对象的特性--继承 继承的概念 实现继承(超类和子类) 多态 动态绑定 面向对象的特性--继承 通过继承实现代码复用。继承而得到的类称为子类,被继承的类称为父类。子类可以重写父类的方法,及命名与父类同名的成员变量。 Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。 Java不支持多重继承,即一个类从多个超类派生的能力。 继承关系 超类(Car.java) 运用继承,你能够创建一个通用超类,它定义了一系列相关项目的一般特性。 将各类汽车的公共属性和方法都纳入Car类中 公共属性:排气量、最高时速、当前时速等 公共方法:启动、加速等 子类(Porsche2.java ) 子类是超类的扩展版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素,如: Porsche2扩展Car类,增加了Porsche2特定属性:涡轮 、 二氧化碳 public class Porsche2 extends Car { // add attributes private int turbos = 2; rivate boolean nos; …… 方法重写(Porsche2.java ) 子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。 Porsche2重写了Car中的accelerate 、 decelerate 方法,其将会覆盖Car中相同签名方法 方法重写原则 ◇ 方法重写时应遵循的原则:   1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。   2)改写后的方法不能比重写的方法产生更多的例外(异常)。 super关键字 super与this类似,this变量引用类实例,super则引用超类实例,可以用super引用超类的方法和变量,super方法则引用超类的构造方法 子类通过super方法决定调用超类的那个构造方法 public Porsche2() { super( Porsche, 450, 220, 2, Yellow, 15, 5, Car.TIPTRONIC ); ……. } super关键字 如果子类构造方法中既未显式调用父类构造方法,而父类中又没有默认的构造方法,则编译出错。 super方法只能用于构造方法的第一条语句(思考:为什么?) super 与 this区别 super() /this() 构造函数 super.MethodName() this.MethodName() 调用方法 Super.PropertyName this. PropertyName 调用属性 This可以作为参数传入,super则不可以 class A{ protected int i = 0;} class B extends A{ public void Add(A a){ for(int i = 0;i10;i++){ a.i++; System.out.println(a.i); } } public void Add(){ Add(this); //this 作为一个对象传入,允许 //Add(super); //不允许 } public static void main(String argc[]){ B b = new B(); b.Add(); }} final 关键字 final 关键字可以修饰类、类的成员变量,变量,和成员方法,但final 的作用不同。 1) final 修饰成员变量则成为实例常量(上一章) 2) final 修饰成员方法则该方法不能被子类重写 3) final修饰类,则类不能被继承    面向对象的特性—多态 子类的对象可以替代父类的对象使用 一个超类变量可以实际引用不同子类的对象 Car myCar; myCar=new Porsche2(); 多态 引用子类对象的超类变量不能再访问子类中添加的属性和方法 Car myCar=new Porsche2(); myCar. engageTurbos() ;//Error 但可以访问超类中声明被子类覆盖(重写)的方法! myCar. accelerate () ; //提问? myCar. accelerate()执行的哪个方法?为什么 动态绑定 java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。 其中有这样的两个原则: 1、访问一

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档