Java面向对象程序设计第8讲

Java面向对象程序设计第8讲

ID:38967123

大小:696.31 KB

页数:41页

时间:2019-06-22

Java面向对象程序设计第8讲_第1页
Java面向对象程序设计第8讲_第2页
Java面向对象程序设计第8讲_第3页
Java面向对象程序设计第8讲_第4页
Java面向对象程序设计第8讲_第5页
资源描述:

《Java面向对象程序设计第8讲》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章面向对象程序设计5.2类的继承(inheritance)类继承也称类派生,是指一个类可以继承其他类的非私有成员,实现代码复用。被继承的类称为父类或超类,父类包括所有直接或间接被继承的类;继承父类或超类后产生的类称为派生类或子类。以Object类作为所有类的父类,所有的类都是直接或间接地继承Object类得到的。在Java,只允许单继承。所谓单继承是指每个类只有一个父类,不允许有多个父类。一个类允许同时拥有多个子类,这时这个父类实际上是所有子类的公共成员变量和公共方法成员的集合,而每一个子类则是父类的特殊化,是对公共成员变量和方法成员的功能、内涵方面的扩展和延

2、伸。Java的多继承可通过接口来实现。类继承不改变成员的访问权限,父类中的成员为公有的或被保护的,则其子类的成员访问权限也继承为公有的或被保护的。5.2.1类继承的实现继承是通过extends关键字来实现的,在定义新类时使用extends关键字指明新类的父类,就在两个类之间建立了继承关系。1.定义子类前面其类头分别为:publicclassHelloAppletextendsApplet{......}classMyExceptionextendsException{......}一般地,在类声明中,加入extends子句来创建一个类的子类。extends后即为父

3、类名,若父类名又是某个类的子类,则定义的类也是该类的(间接)子类。若无extends子句,则该类为java.lang.Object的子类。2.类继承的传递性类继承具有传递性,即子类继承父类的所有非私有成员,也继承父类的父类直至祖先所有的所有非私有成员。3.类的成员覆盖在类的继承中,若子类(派生类)新增的成员名称与父类(超类)成员相同,则称为成员覆盖(overriding)。在子类中定义与父类同名成员的目的是修改父类的属性和行为。(1)成员变量的覆盖若子类声明了与父类同名的变量,则父类的变量被隐藏起来,直接使用的是子类的变量,但父类的变量仍占据空间,可通过super

4、或父类名来访问。【例5.14】在子类中定义了与父类同名的变量,从而隐藏了父类成员变量,这种隐藏变量可加super前缀来访问。classA{intx=100;}classBextendsA{intx=200;voidprint(){System.out.println("Subclass:"+x);System.out.println("Superclass:"+super.x);}publicstaticvoidmain(Stringargs[]){(newB()).print();}}程序运行结果如下:Subclass:200Superclass:100(2)成

5、员方法覆盖方法成员的覆盖与成员变量的隐藏的不同之处在于:子类隐藏父类的成员变量只是使得它不可见,父类的同名成员变量在子类对象中仍然占据自己的存储空间;而子类成员方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使得父类的方法在子类对象中不复存在。方法的覆盖中需注意的是:子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数列表。否则就不是方法的覆盖。而是在子类定义自己的与父类无关的成员方法,父类的方法未被覆盖,所以仍然存在。下述规则适用于覆盖方法:覆盖方法的返回类型必须与它所覆盖的方法相同。覆盖方法不能

6、比它所覆盖的方法访问性差。覆盖方法不能比它所覆盖的方法抛出更多的异常。4.派生类的初始化在创建派生类的对象时,使用派生类的构造方法对其初始化,不但要对自身的成员变量赋初值,还要对父类的的成员变量赋初值。因为成员变量赋初值通常在构造方法中完成,因此在Java语言中,允许派生类继承父类的构造方法。构造方法的继承遵循如下的原则:(1)若父类是无参数的构造方法,则子类无条件的继承该构造方法。(2)若子类无自己的构造方法,则它将继承父类的无参构造方法作为自己的构造方法;若子类有自己的构造方法,则在创建子类对象时,它将先执行继承自父类的无参构造方法,然后再执行自己的构造方法。

7、(3)若父类是有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。【例5.15】继承例5.6中的类RectConstructor时对父类的成员变量赋初值。classCubeextendsRectConstructor{doubleheight;Cube(doublel,doublew,doubleh){super(l,w);height=h;}voidvol(){System.out.println("长方体体积="+area()*height);}}publicclassCubeDem

8、o{pub

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。