您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第3章面向对象程序设计(4)
面向对象的编程划分黄淮学院计算机科学系王春华1(对应章节(4.1继承的概念4.2类继承4.3.2super3.7最终类/属性/方法)黄淮学院计算机科学系王春华23子类继承父类的方法和属性,实现代码复用1.无继承时多类协作•对象组合实现代码复用(程序见备注)•类的实例作为另一个类的成员452.类继承实现代码复用(1)•类的层次结构:每个类都有父类–如果没有使用extends关键字,则Object类就是缺省的父类。–Object类包含在java.lang包中。所有的类都是从这个类继承而来的。–Object类定义了Java系统需要的所有类的行为。–查看JDK帮助文档JOptionPane62.类继承实现代码复用(2)•类继承的实现–一个类能从其它类继承行为与属性(非private修饰),由此直接实现代码复用。–类继承例程阅读72.类继承实现代码复用(3)–构造方法不可继承•实例见备注程序•继承时的对象初始化–例程阅读–默认执行的父类构造方法是无参构造方法,如果父类显式地定义了构造方法,且均有参数,则这样自动调用会使编译出错。82.类继承实现代码复用(4)-思考1.一个类如何去继承另一个类?2.一个类继承另一个类时,究竟继承了什么?3.类的继承有什么好处?4.每个类都有父类吗?5.如果类定义时无extends部分,该类的父类是?6.多个子类可以继承自一个父类吗?7.一个类可以同时继承多个父类吗?8.若不希望父类中的某成员被子类所继承,如何实现?9.根类Object在哪个软件包中?10.对象的初始化时,父类的什么样的构造方法能自动执行?11.如何主动调用父类的构造方法?12.父类构造方法的执行时机?9103.方法的重写/覆盖(overriding)•当一个子类继承父类时,子类将自动拥有父类的非私有的成员变量和成员方法。–问题:如果父类的某个方法对于子类不合适怎么办?•方法重写例程阅读–本例重写意义:在继承Persons的子类Children中,重写employed方法,输出“Achildshouldstudyintheschool.”113.方法的重写(overriding)(1)•方法重写设计要点–方法名相同,方法返回类型相同,参数相同–重写总是在父类和子类之间(重载overload是一个类内部进行的)–重写的意义是修正覆盖父类方法–子类重写父类的方法时,不可以降低方法的访问权限。•如果需要屏蔽父类的属性数据,同样也可以子类中重定义同名的变量实现。12134.super关键字•super是一个特殊的变量,提供了对父类的访问。(this呢)•调用父类的构造方法–参数可无,可用此格式调用父类的无参或带参的构造方法。–例:阅读程序分析结果。144.super关键字(1)•访问父类的成员–例:阅读程序,分析程序运行结果。•说明:每个子类构造方法的第一条语句都是隐含的调用语句super(),如果父类没有这样形式的构造方法,则编译时会出错。154.super关键字(2)-练习•练习:按照以下给出的步骤,逐步编程。•1.设计一个Animal类,属性有重量、年龄,行为有:吃(eat)、睡(sleep)、呼吸(breathe)。•2.创建继续Animal的子类fish,呼吸行为不同,改造其方法。•3.在main方法中创建一个fish对象,执行吃、睡、呼吸的方法,执行程序理解重写。•4.分别给Animal类和fish类创建一无参构造方法。编译执行,分析结果。•5.改fish类的构造方法带参,编译执行并分析结果。16175.阻止类的继承•final类阻止类继承•final数据•final方法阻止方法重写•思考185.阻止类的继承-final类阻止类继承•如类在设计时需确定为阻止继承,可在类名加修饰词final实现。形式如:•用final类创建对象,或直接访问其中的静态成员,但不能用final类派生子类。如String类就是一个final类。195.阻止类的继承-final类阻止类继承(1)•例:阅读程序,分析程序可行性。20说明:(1)习惯上将public等权限修饰符置于final之前。(2)类的构造方法权限定为private,可间接阻断类继承。5.阻止类的继承-final数据•final可定义常数和不可变更的对象引用。形式如:final类型标识符;–如:finaldoublePI=3.14159;–finalCirclec=newCircle(5);•说明:–(1)当类型是基本数据型时,final说明一个标识符为常数。–(2)当类型是对象时,final说明一个标识符为不可变更的对象引用。•例:阅读程序,分析程序可行性。215.阻止类的继承-final方法•final方法是不可重写的方法。•例:阅读程序,分析程序可行性。•类中声明为private的方法均隐含指定为final方法。这个道理是显然的,因为类外部无法访问私有方法,自然也就不能重写它了。22final总结•final修饰类,表明类不可继承;•final修饰类中的方法,表明方法不可被继承类(子类)重写;•final修饰类中的成员变量,表明不可改变的数据。235.阻止类的继承-思考•1.如何定义一个常数?•2.final修饰的对象引用有何特别的意味?•3.final方法一定要在final类中定义吗?•4.如果一个类的方法不允许子类改写,如何设置?•5.final类可以被继承吗?•6.final限制了还是拓广了类的复用?•7.何时考虑将一个类设定为final类?24总结25
本文标题:第3章面向对象程序设计(4)
链接地址:https://www.777doc.com/doc-2193848 .html