Java扩展类与继承.ppt
《Java扩展类与继承.ppt》由会员分享,可在线阅读,更多相关《Java扩展类与继承.ppt(49页珍藏版)》请在三一办公上搜索。
1、Java语言程序设计,第六章 扩展类与继承,6.1 子类与父类,上一章我们主要学习了类和对象的有关知识,讨论了类的构成以及用类创建对象等主要问题,本章的主要介绍类的继承、和继承有关的多态性以及接口等重要概念。子类与父类 继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类(派生类)(derivated class),被继承的类称为父类(超类)(superclass)。,6.1 子类与父类,父类可以是自己编写的类也可以是java类库中的类。
2、利用继承有利于实现代码的重复使用,子类只需要添加新的功能代码即可。Java不支持多重继承,即子类只能有一个父类。使用关键字extends来声明一个类是另外一个类的子类,格式如下:class 子类名 extends 父类名.,6.2 子类的继承性,1继承的定义 所谓类继承就是子类继承父类的成员变量和方法作为自己的成员变量和方法,就好象它们是在子类中直接声明一样。当然,子类能否继承父类的变量和方法还有一定的限制。下面对其进行详细介绍。2子类和父类在同一包中的继承性 如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是p
3、rivate的方法作为自己的方法。继承的成员变量以及方法的访问权限保持不变。例子,6.2 子类的继承性,下面我们看一个例子。程序的运行结果见下图,6.2 子类的继承性,3子类和父类不在同一包中的继承性 如果子类和父类不在同一个包中,那么子类只能继承父类的protected、public成员变量和方法,继承的成员或方法的访问权限不变。,6.3 子类对象的构造过程,当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,如果子类的构造方法没有指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。因此,我们可以这样来理解子类创建的对象:(1)将子类中声明的成员变
4、量做为子类对象的成员变量。(2)父类的成员变量也都分配了内存空间,但只将其中一部分(继承的那部分)做为子类对象的成员变量。父类的private成员变量尽管分配了内存空间,但它不作为子类的成员变量,6.3 子类对象的构造过程,即父类的私有成员不归子类管理。方法的继承性与成员变量相同。但若子类和父类不在同一包中,尽管父类的友好成员分配了内存空间,但也不作为子类的成员。子类对象内存示意图如下图,6.3 子类对象的构造过程,上页示意图中的“叉号”表示子类中声明定义的方法不可以操作这些内存单元,“对号”表示子类中声明定义的方法可以操作这些内存单元。通过上图,给我们有感觉好象:子类创建对象时似乎浪费了一些
5、内存,因为当用子类创建对象时,父类的成员变量也都分配了内存空间,但只将其中一部分做为子类对象的成员变量,但实际情况并非如此,我们需注意到,子类中还有一部分方法是从父类继承的,这部分方法却可以操作这部分变量。下面的例子中,子类对象调用继承的方法操作这些未被子类继承却分配了内存空间的变量。,6.4 成员变量的隐藏和方法的重写,1成员变量的隐藏 子类可以隐藏继承的成员变量,当在子类中定义和父类中同名的成员变量时,子类就隐藏了继承的成员变量,即子类对象以及子类自己声明定义的方法操作与父类同名的成员变量。下面我们看一个例子,在这个例子中子类隐藏了从父类继承的double型变量。该程序的运行结果如下:,6
6、.4 成员变量的隐藏和方法的重写,2方法重写 子类也可以隐藏方法,子类通过方法重写来隐藏继承的方法。方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同。子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。这时,如果子类想使用被隐藏的方法,必须使用关键字super,我们将在后面讲述super的用法。下面这个例子可以帮助我们更好的理解方法的重写。,6.4 成员变量的隐藏和方法的重写,需要注意的是:方法重写时一定要保证方法的名字、类型、参数个数和类型同父类的某个方法完全相同,只有这样,子类继承的这个方法才被隐藏。如果子类在准备隐藏继承
7、的方法时,参数个数或参数类型与父类的方法不尽相同,那实际上也没有隐藏继承的方法,这时子类就出现两个方法具有相同的名字。下面我们看个例子。程序的运行结果如右图:,6.4 成员变量的隐藏和方法的重写,3访问修饰符protected的进一步说明 一个类A中的protected成员变量和方法可以被它的直接子类和间接子类继承,比如B是A的子类,C是B的子类,D又是C的子类,那么B、C和D类都继承了A的 protected成员变量和方法。如果用D类在D本身中创建了一个对象,那么该对象总是可以通过“.”运算符访问继承的或自己定义的protected变量和protected方法的,但是,如果在另外一个类中,比
8、如E类,用D类创建了一个对象object,该对象通过“.”运算符访问protected变量和protected方法的权限如下列(a)、(b)所述。,6.4 成员变量的隐藏和方法的重写,(a)子类D的protected成员变量和方法,如果不是从父类继承来的,object访问这些protected成员变量和方法时,只要E类和D类在同一个包中就可以了。(b)如果子类D的对象的protected成员变量或protected方法是从父类继承的,那么就要一直追溯到该protected成员变量或方法的“祖先”类,即A类,如果E类和A类在同一个包中,object对象能访问继承的protected变量和prot
9、ected方法。,类继承图,6.5 Super 关键字,Super关键字有两种用法:一种用法是子类使用super调用父类的构造方法,另一种用法是子类使用super调用被子类隐藏的成员变量和方法。1使用super调用父类的构造方法 子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用并且必须使用关键字super来表示,而且super必须是子类构造方法中的第一条语句。在下面的例子中,子类的构造方法中使用super调用父类的构造方法。,6.5 Super 关键字,2使用super操作被隐藏的成员变量和方法 当子类中定义了一个方法,并且这个方法的名字、返回类型、参数
10、个数和类型和父类的某个方法完全相同时,子类从父类继承的这个方法将被隐藏。如果我们在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。在下面这个例子中,子类使用super调用被隐藏的成员变量和方法。其结果如下:,6.6 final 类和final方法,final类不能被继承,即不能有子类,如:final class A 将一个类声明为final类一般是由于安全性考虑。一个方法被修饰为final方法,则这个方法不能被重写,即不允许子类通过重写隐藏继承的final方法。,6.7对象的上转型对象,1对象的上转型 我们经常说“老虎是哺乳动物”、“狗是哺乳动物”等。若哺乳类是老虎类的父类,
11、这样说当然正确,但当你说老虎是哺乳动物时,老虎将失掉老虎独有的属性和功能。下面我们就介绍对象的上转型对象。假设,B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类声明的对象中时,比如:A a;a=new B();,6.7对象的上转型对象,那么就称对象a是子类对象b的上转型对象,对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点(见下图所示)。,6.7对象的上转型对象,(1)上转型对象不能操作子类声明定义的成员变量;也不能使用子类声明定义的方法。(2)上转型对象可以操作子类继承的成员变量和隐藏的成员变量,也可以使用
12、子类继承的或重写的方法。(3)上转型对象不能操作子类新增的方法和成员变量(4)可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能。为了更好的理解对象的上转型,我们先看个例子。,6.7对象的上转型对象,注意:不要将父类创建的对象和子类对象的上转型对象混淆,对象的上转型对象的实体是由子类负责创建的,只不过失掉了一些属性和功能而已。,6.8 继承与多态,和继承有关的多态性是指父类的某个方法被其子类重写时,可以产生自己的功能行为,即同一个操作被不同类型对象调用时可能产生不同的行为。例如,狗和猫都具有哺乳类的功能:“叫声”,当狗操作“叫声”时产生的声音是“汪汪,而
13、猫操作“叫声”时产生的声音是“喵喵”,这就是“叫声”的多态。当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。当我们把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转型对象在调用这个方法时就可能具有多种形态。,6.8 继承与多态,因为不同的子类在重写父类的方法时可能产生不同的行为。也就是说,不同对象的上转型对象调用同一方法可能产生不同的行为。下面让我们看一个例子来更好地了解继承与多态和对象的上转型对象。程序的运行结果如下图:,6.9 使用abstract 类,用关键字abstract修饰类称为abstract类(抽象类)。如:abstract
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 扩展 继承

链接地址:https://www.31ppt.com/p-6509804.html