第七章继承和多态.ppt
《第七章继承和多态.ppt》由会员分享,可在线阅读,更多相关《第七章继承和多态.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章继承和多态现在学习的是第1页,共34页内容回顾v构造方法v方法重载v封装与访问权限控制现在学习的是第2页,共34页本讲内容v继承与方法重写v多态v抽象类与抽象方法vinstanceof运算符与类型转换 现在学习的是第3页,共34页本讲目标v掌握继承的概念及用法。v掌握多态的概念及用法v掌握抽象类的使用现在学习的是第4页,共34页为什么使用继承?v这两个类图有什么问题?-name:String-health:int-love:int-strain:StringDog+print():void+getName():String+getHealth():int+getLove():int+ge
2、tStrain:String+Dog()-name:String-health:int-love:int-sex:StringPenguin+print():void+getName():String+getHealth():int+getLove():int+getSex():String+Penguin()使用继承优化设计使用继承优化设计 将重复代码将重复代码抽取到父类抽取到父类中中现在学习的是第5页,共34页继承的好处使用继承优化后:使用继承优化后:子类与父类是子类与父类是is-a关系关系 减少代码量减少代码量 方便修改代方便修改代码码 现在学习的是第6页,共34页如何使用继承v使用继承
3、编写父类编写子类,继承父类class Pet /公共的属性和方法公共的属性和方法class Dog extends Pet /子类特有的属性和方法子类特有的属性和方法class Penguin extends Pet 只能继承一个父类只能继承一个父类 继承关键字继承关键字 现在学习的是第7页,共34页继承的实现vextends关键字用于继承类。v声明一个继承父类的类的通常形式如下:class subclass-name extends superclass-name /类体 例:class Student extends Person 注:注:没有没有extends,默认父类为,默认父类为Ob
4、ject,是最高层类。是最高层类。只能有一个父类,即单继承只能有一个父类,即单继承现在学习的是第8页,共34页理解继承v子类访问父类成员访问父类属性访问父类方法 使用使用super关键字关键字 super.name;super.print();super代表父代表父类对象类对象 现在学习的是第9页,共34页理解继承v子类继承了父类的属性和方法v但有些父类成员不能继承:private成员 子类与父类不在同包,使用默认访问权限的成员构造方法现在学习的是第10页,共34页继承的特点v通过继承可以简化类的定义,实现代码的重用vJava只支持单继承,不允许多重继承。v可以有多层继承;类B继承类A;类C继
5、承类B;v子类继承父类的成员变量和成员方法,但不继承父类的构造方法v在子类的构造方法中可用super(参数列表)调用父类的构造方法。v如果子类的构造方法中没有显式的调用父类构造方法,也没有使用this关键字调用自己的其他构造方法,那么在产生子类实例对象时JVM自动调用父类无参数的构造方法。现在学习的是第11页,共34页何时使用继承何时使用继承?继承与真实世界类似只要说“猫是哺乳动物”,猫的很多属性、行为 就不言自明了藏獒是一种狗继承是代码重用的一种方式 将子类都有的属性和行为放到父类中将子类都有的属性和行为放到父类中 符合符合is-a关系的设计使用继承关系的设计使用继承 现在学习的是第12页,
6、共34页小结v阅读代码,说出运行结果class Car private int site=4;/座位数座位数 Car()System.out.println(载客量是载客量是+site+人人);public void setSite(int site)this.site=site;void print()System.out.print(载客量是载客量是+site+人人);class Bus extends Car Bus(int site)setSite(site);public static void main(String args)Bus bus=new Bus(20);bus.pri
7、nt();载客量是载客量是4人人载客量是载客量是20人人 现在学习的是第13页,共34页方法重写v子类中有和父类相同签名的方法,会如何?子类子类重写重写父类方法父类方法 现在学习的是第14页,共34页方法重写v子类可以定义与父类同名的变量,实现对父类变量的隐藏v子类可以定义与父类同名的方法,实现对父类方法的覆盖,即方法重写v方法重写的条件:方法重写的条件:必须具有相同的方法名;必须具有相同的参数列表;重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类;重写方法的不能缩小被重写方法的访问权限。现在学习的是第15页,共34页方法重写v构造方法能被重写吗?v如何在子类中调用父类的构造方
8、法?super();super(参数表参数表);可以被默认可以被默认添加添加 只能是构造方法的只能是构造方法的第一条语句第一条语句 不能被继承因此不能重写不能被继承因此不能重写 现在学习的是第16页,共34页方法修饰符方法修饰符方法修饰符方法修饰符方法修饰符staticfinalabstract现在学习的是第17页,共34页static修饰符vstatic修饰符修饰的方法叫静态方法v目的:使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法 规规规规 则则则则可以调用其他静态方法必须访问静态数据不能使用 super 或 this 关键字现在学习的是第18页,共34页final修饰
9、符 finalfinal不能修改变量不能修改变量子类不能重写方法子类不能重写方法类不能被继承类不能被继承现在学习的是第19页,共34页vPenguin类不希望再被其他类继承?使用final类v方法不希望被重写?使用final方法v属性值不希望被修改?使用final方法final用法public final class Penguin extends Pet /最终版的类最终版的类 public final void print()/最终版的方法最终版的方法public class Penguin final String home=南极南极;/居住地居住地 public void setHom
10、e(String name)this.home=home;/错误,错误,home不可以再次赋值不可以再次赋值 最终版的属性值最终版的属性值现在学习的是第20页,共34页abstract修饰符v由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类v抽象方法必须声明在抽象类中v抽象方法语法:abstract type method_name(parameter_list);v声明抽象类语法:abstract class v使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节v抽象方法没有方法体v抽象方法必须在子类中被实现,除非子类是抽象类现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 继承
限制150内