欢迎来到天天文库
浏览记录
ID:48770602
大小:71.50 KB
页数:19页
时间:2020-01-23
《第06讲 继承、多态.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、继承、多态面向对象的特性--继承继承的概念实现继承(超类和子类)多态动态绑定9/2/20212继承、多态面向对象的特性--继承通过继承实现代码复用。继承而得到的类称为子类,被继承的类称为父类。子类可以重写父类的方法,及命名与父类同名的成员变量。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。Java不支持多重继承,即一个类从多个超类派生的能力。9/2/20213继承、多态继承关系9/2/20214继承、多态超类(Car.java)运用继承,你能够创建一个通用超类,它定义了一系列相关项目的一般特性。将各类汽车的公共属性和方法都纳入
2、Car类中公共属性:排气量、最高时速、当前时速等公共方法:启动、加速等9/2/20215继承、多态子类(Porsche2.java)子类是超类的扩展版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素,如:Porsche2扩展Car类,增加了Porsche2特定属性:涡轮、二氧化碳publicclassPorsche2extendsCar{//addattributesprivateintturbos=2;rivatebooleannos;……9/2/20216继承、多态方法重写(Porsche2.java)子类通过隐藏父类的成员变量和重写父类
3、的方法,可以把父类的状态和行为改变为自身的状态和行为。Porsche2重写了Car中的accelerate、decelerate方法,其将会覆盖Car中相同签名方法9/2/20217继承、多态方法重写原则◇方法重写时应遵循的原则:1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。2)改写后的方法不能比重写的方法产生更多的例外(异常)。9/2/20218继承、多态super关键字super与this类似,this变量引用类实例,super则引用超类实例,可以用super引用超类的方法和变量,super方法则引用超类的构造方法子类通过super方法决定
4、调用超类的那个构造方法publicPorsche2(){super("Porsche",450,220,2,"Yellow",15,5,Car.TIPTRONIC);…….}9/2/20219继承、多态super关键字如果子类构造方法中既未显式调用父类构造方法,而父类中又没有默认的构造方法,则编译出错。super方法只能用于构造方法的第一条语句(思考:为什么?)super与this区别super()/this()构造函数super.MethodName()this.MethodName()调用方法Super.PropertyNamethis.PropertyNam
5、e调用属性This可以作为参数传入,super则不可以classA{protectedinti=0;}classBextendsA{publicvoidAdd(Aa){for(inti=0;i<10;i++){a.i++;System.out.println(a.i);}}publicvoidAdd(){Add(this);//this作为一个对象传入,允许//Add(super);//不允许}publicstaticvoidmain(Stringargc[]){Bb=newB();b.Add();}}9/2/202110继承、多态final关键字final关键字
6、可以修饰类、类的成员变量,变量,和成员方法,但final的作用不同。1)final修饰成员变量则成为实例常量(上一章)2)final修饰成员方法则该方法不能被子类重写3)final修饰类,则类不能被继承9/2/202111继承、多态面向对象的特性—多态子类的对象可以替代父类的对象使用一个超类变量可以实际引用不同子类的对象CarmyCar;myCar=newPorsche2();9/2/202112继承、多态多态引用子类对象的超类变量不能再访问子类中添加的属性和方法CarmyCar=newPorsche2();myCar.engageTurbos();//Error
7、但可以访问超类中声明被子类覆盖(重写)的方法!myCar.accelerate();//提问?myCar.accelerate()执行的哪个方法?为什么9/2/202113继承、多态动态绑定java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。其中有这样的两个原则:1、访问一个引用类型的变量的非静态方法,运行时与实际引用的对象的方法绑定;2、访问一个引用类型的变量的成员变量,运行时与声明的类的成员变量绑定;(?)其原因,对于
8、成员变量,
此文档下载收益归作者所有