1、Java 2 实用教程,Java 2: A Beginners Guide,甘朝华,第七章 继承, 理解继承的基础知识 调用超类构造函数 使用super访问超类成员 创建多级类层次结构 了解何时调用构造函数 理解子类对象的超类引用 重写方法 使用重写方法实现动态方法分配 使用抽象类 使用final 了解Object类,继承是面向对象程序设计的三个基本原则之一,它允许创建类层次结构。Java语言中,被继承的类称为超类,继承类称为子类。,7.1 继承的基础知识,Java通过允许在一个类的声明中加入另一个类来实现继承,这需要使用关键字extends。,class TwoDShape double w
2、idth;double height;void showDim()/ ,7.1 继承的基础知识,class Triangle extends TwoDShape String style;double area( )return width * height / 2;void showStyle()/ ,7.1 继承的基础知识,成员访问与继承:private声明的成员:继承不会超越private的访问限制。protected声明,7.2 构造函数和继承,在层次结构中,超类和子类都可以有自己的构造函数。超类构造函数 - 子类构造函数使用super调用超类构造函数:super( parameter
3、-list ); /必须是在子类中第一个执行语句。?执行的是超类的哪一个构造函数?,7.3 使用super访问超类成员,super的第二种形式的工作方式与this相似,只不过它饮用的是子类的超类。super.membermember是方法或实例变量,当子类的成员名隐藏了超类的成员名时使用。练习7-1 扩展Vehicle类,7.4 创建多级层次结构,可以创建任意多层继承组成的层次结构。,TwoDShape,Triangle,ColorTriangle,7.5 何时调用构造函数,按照继承的顺序:超类子类,7.6 超类引用和子类对象,Java是一种类型严格的语言。除了标准转换和应用于简单类型的自动转
4、换外,类型兼容是被严格执行的。class X/ class Y/ X x = new X(); Y y = new Y(); X x2 = x; /合法x2 = y; /非法,7.6 超类引用和子类对象,class X/ class Y extends X/ X x = new X(); Y y = new Y(); X x2 = x; /合法x2 = y; /合法,7.6 超类引用和子类对象,超类指针的访问权限:它能访问子类的成员吗?,7.7 方法重写,在类层次结构中,当子类中的方法与其超类中的方法同名且类型一致(函数签名相同)时,那么就称子类中的方法重写(override)了超类中的方法。
5、在一个子类中调用被重写方法时,它总是引用子类中定义的方法,而超类中定义的方法将被隐藏。,7.8 重写的方法支持多态性,方法重写构成了Java最强大的概念之一:动态方法分配(dynamic method dispatch)。动态方法分配是一种机制,通过该机制对一个被重写方法的调用会在运行期解决,而不是在编译期解决。演示 多态运行期调用,7.8 重写的方法支持多态性,1、为何使用重写的方法使得Java支持运行时多态性。是面向对象程序设计的特性之一。2、在TwoDShape中应用方法重写讲解 例题,7.9 使用抽象类,抽象类只定义为所有子类共享的一般形式,至于细节则交给每一个子类去填充实现。接口(I
6、nterface) 抽象方法(abstract method)通过abstract类型修饰符来创建abstract type name( parameter-list );abstract不能用于static方法或构造函数。包含一个或多个抽象方法的类必须通过在其class声明前添加abstract修饰符将其声明为抽象类。,7.10 使用final,用于阻止方法重写和继承。,7.10 使用final,1、使用final防止重写class A final void meth( ) / class B extends A void meth( ) /Error/ ,7.10 使用final,2、使用final防止继承final class A / class B extends A /Error/ ,7.10 使用final,3、数据成员使用final值在程序的生命期中不能改变。 class ErrorMsg final int OUTERR = 0;final int INERR = 1;final int DISKERR = 2;final int INDEXERR = 3;/ 注意:与静态变量的区别(Page 203),7.11 Object类,所有类的一个隐式超类。Object类的方法:Page 259 表7-1,思考与练习,2、5、9,