第09讲 继承、多态

上传人:t****d 文档编号:242914042 上传时间:2024-09-11 格式:PPT 页数:19 大小:99KB
返回 下载 相关 举报
第09讲 继承、多态_第1页
第1页 / 共19页
第09讲 继承、多态_第2页
第2页 / 共19页
第09讲 继承、多态_第3页
第3页 / 共19页
点击查看更多>>
资源描述
Click Here,Click here,Click here,Click here,Click here,Click here,*,*,继承、 多态,面向对象的特性-继承,继承的概念,实现继承(超类和子类),多态 动态绑定,9/11/2024,2,面向对象的特性-继承,通过继承实现代码复用。继承而得到的类称为子类,被继承的类称为父类。子类可以重写父类的方法,及命名与父类同名的成员变量。,Java,中所有的类都是通过直接或间接地继承,java.lang.Object,类得到的。,Java,不支持多重继承,即一个类从多个超类派生的能力。,指 代的是类和类的关系,9/11/2024,3,继承关系,9/11/2024,4,超类(,Car.java,),运用继承,你能够创建一个通用,超,类,它定义了一系列相关项目的一般特性。,将各类汽车的公共属性和方法都纳入,Car,类中,公共属性:排气量,、,最高时速,、,当前时速等,公共方法:启动,、,加速等,9/11/2024,5,子类(Porsche2.java ),子类是超类的扩展版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素,,如:,Porsche2,扩展,Car,类,增加了,Porsche2,特定属性:涡轮 、 二氧化碳,public class Porsche2,extends,Car ,/ add attributes,private int turbos = 2;,rivate boolean nos;,9/11/2024,6,继承,当子类继承父类时,子类会把父类当中,能,继承过来的属性和方法都继承,对于父类中的构造函数,那么子类会用super(参数或不带参)来调用,调用的目的是用于把父类中属性变量初始化,进而在继承过来;,如果不在子类的构造函数中写super(参数或不带参)调用父类的构造函数,那么默认都会通过super( );来调用父类中不带参的构造函数,如果这个时候父类当中不带参数的构造函数不存在那么报错,如果在一个类中没有写构造函数,那么默认有一个不带参的构造函数,写了带参的构造函数系统就不会有默认的不带参数的构造函数!,9/11/2024,7,方法重写(Porsche2.java ),子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。,Porsche2,重写了,Car,中的方法,其将会覆盖,Car,中相同签名方法,9/11/2024,8,方法重写原则,方法重写时应遵循的原则,:,1,)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。,2,)改写后的方法不能比重写的方法产生更多的例外(异常)。,9/11/2024,9,super关键字,super,与,this,类似,,this,变量引用类实例,,super,则引用超类实例,可以用,super,引用超类的方法和变量,,super,方法则引用超类的构造方法,子类通过,super,方法决定调用超类的那个构造方法,public Porsche2() ,super( Porsche, 450, 220, 2, Yellow, 15, 5, Car.TIPTRONIC );,.,9/11/2024,10,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();,9/11/2024,11,面向对象的特性多态,子类的对象可以替代父类的对象使用,一个超类变量可以实际引用不同子类的对象,Car myCar;,myCar=new Porsche2();,(1)重载(overload),在同一个类中,如果自己写的两个或多个方法,方法名相同参数列表不同(与返回类型无关),那么这两个或多个方法发生了重载,(2)覆盖即重写(override),如果子类继承了父类把父类中方法继承过来,子类又添加了自己的方法,该方法和从父类继承过来的方法,方法名相同,返回类型相同,参数列表相同,访问修饰相同,异常声明相同(总称为方法声明相同),那么子类的方法覆盖(重写)了从父类继承到子类中方法,9/11/2024,12,多态,引用子类对象的超类变量不能再访问子类中添加的属性和方法,Car myCar=new Porsche2();,myCar. engageTurbos(),;,/Error,但可以访问超类中声明被子类覆盖(重写)的方法!,myCar. accelerate (),;,/,提问?,myCar. accelerate(),执行的哪个方法?为什么,9/11/2024,13,动态绑定,java,运行时系统根据调用该方法的,实例,,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。,其中有这样的两个原则: 1、访问一个引用类型的变量的非静态方法,运行时与实际引用的对象的方法绑定; 2、访问一个引用类型的变量的成员变量,运行时与声明的类的成员变量绑定; (?)其原因,对于成员变量,只有隐藏一说,并不能重载/改写,而对于方法,才有改写一说。,class A int v = 10;,class B extends A int v = 100;,public class Test ,public static void main(String args) ,A a = new A();,B b = new B();,A c = new B();,System.out.println(a.v = + a.v);,System.out.println(b.v = + b.v);,System.out.println(c.v = + c.v);,看这个例子,输出是a.v=10b.v=100c.v=10,9/11/2024,14,多态示例,public void drive( Car c ),System.out.println( Driving: + c );,c.start();,for( int i=0; i10; i+ ),c.accelerate();,System.out.println( Current speed: + c.getCurrentSpeed() );,for( int i=0; i5; i+ ),c.decelerate();,System.out.println( Current speed: + c.getCurrentSpeed() );,c.stop();,9/11/2024,15,多态示例(Driver2.java ),思考,A,:为什么,Driver2.java,中只用定义一个,drive,方法,就可以驾驶两种不同类型汽车,如果又有新车加入,drive,方法需要改变吗?,9/11/2024,16,方法重写与重载,重载方法,-,静态绑定,同一个类,中的多个同名方法,其参数列表必须不同,返回值不同或者相同。,重写方法,-,动态绑定,子类重写父类中方法,其将会覆盖父类中相同签名方法。,9/11/2024,17,掌握重点,理解继承概念,为什么要使用继承,如何定义超类,子类,方法重载和重写,多态是如何实现的,9/11/2024,18,课后练习,设计一个上一章,Employee,类的子类,Manager,类,并覆盖,getSalary,方法(提示:,Manager,有职务奖金),设计一个工具类,Test,,实现,getSalary,方法获得指定,Employee,对象的,salary,9/11/2024,19,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!