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