《Java程序设计教程》课件第4章 深入面向对象程序设计_第1页
《Java程序设计教程》课件第4章 深入面向对象程序设计_第2页
《Java程序设计教程》课件第4章 深入面向对象程序设计_第3页
《Java程序设计教程》课件第4章 深入面向对象程序设计_第4页
《Java程序设计教程》课件第4章 深入面向对象程序设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多态

2接口

4继承

31抽象类

33内部类

35本章内容提要

面向对象的程序设计方法力求符合人脑的思维方式,通过符合人类思维的更抽象的客观世界模型,降低、分解问题的难度和复杂性,并以此来解决问题。4.1继承

继承的定义在Java语言中,用extends关键字来表示一个类继承了另一个类,被继承的类称为父类、超类或基类,派生的新类称为子类。例如:

publicclassSubextendsBase{

…}4.1继承1.父类与子类父类和子类的关系可以用自然语言描述为:子类isa父类。

[例4-1]子类继承父类子类与父类的关系类似于家族关系,继承关系可以一直传递下去。4.1继承2.继承的限制(1)子类和父类位于同一个包中子类继承父类中public、protected和默认访问级别的成员变量和成员方法。(2)子类和父类位于不同的包中子类继承父类中public和protected访问级别的成员变量和成员方法。

[例4-2]继承的限制4.1继承3.类继承的原则(1)子类只能有一个直接父类(2)继承具有传递性(3)继承不能循环(4)除Object类外,所有类都有父类4.1继承

属性隐藏子类继承父类时,不需要重新定义父类中可以被继承的属性。某些情况下,子类需要对从父类继承来的属性变量重新加以定义,使父类和子类的属性同名但不同值,这种机制称为属性的隐藏。

[例4-3]属性隐藏4.1继承

方法覆盖

如果在子类中定义的一个方法,其名称、返回类型及参数定义正好与父类中某个方法的名称、返回类型及参数定义相同,则可以说,子类的方法覆盖了父类的方法。方法的参数定义相同指方法中所有对应顺序的参数的类型相同,并且参数的个数相同。

4.1继承【例4-4】方法的覆盖4.1继承直接访问父类的学制:4直接访问子类的学制:3调用子类的方法(已覆盖的方法)访问子类的学制:3方法覆盖的其他要求:(1)子类方法不能缩小父类方法的访问权限。(2)子类方法不能抛出比父类方法更多的异常。(3)方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。

4.1继承

(4)父类的静态方法不能被子类覆盖为非静态方法。(5)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(6)父类的非静态方法不能被子类覆盖为静态方法。(7)父类的私有方法不能被子类覆盖。4.1继承super与this关键字

1.引用构造方法在子类的构造方法中,可以使用super代表指定的某个父类的构造方法;使用this关键字可以代表同一类中不同的构造方法。当调用子类的构造方法创建对象时,如果在子类的构造方法中没有显式的调用父类的构造方法,则super()方法将被自动调用。4.1继承【例4-5】super与this关键字4.1继承createastudent:John,heisagraduateStudentcreateastudent:Tom,heisagraduateStudenthistutor:Bill,hisspecialtydirection:computer

2.引用隐藏变量在Java语言中,变量的隐藏有两种:其一,子类成员变量和父类成员变量同名,父类变量隐藏;其二,类的局部变量和类的成员变量同名,隐藏类的成员变量。4.1继承【例4-6】被覆盖变量的访问4.1继承stu_no=40011stu_nois30011stu_noofStudentis10011stu_noofGraduateStudentis200113.引用覆盖方法当子类的某个方法覆盖了父类的一个方法,可以通过super关键字访问父类的方法,而通过this关键字则可以访问当前类中的方法。

super关键字不能多重使用。例如,super.super()就是非法操作。

4.1继承【例4-7】被覆盖方法的访问4.1继承stu_noofStudentis10011stu_noofGraduateStudentis20011stu_noofGraduateStudentis30011Java语言的多态可以分编译时多态和运行时多态。

编译时多态又称为静态多态,主要体现为方法的动态重载;

运行时多态又称为为动态多态,主要体现为动态绑定。4.2多态

方法重载

对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。参数不一致包括参数数目的不同,也包括参数顺序和参数类型的不同。

4.2多态

重载方法必须满足以下条件:(1)方法名相同。(2)方法中对应的参数类型、个数至少有一项不相同。(3)方法的返回类型可以不相同。(4)方法的修饰符可以不相同。在一个类中不允许定义两个方法名相同,并且参数定义也完全相同的方法。4.2多态[例4-8]方法重载的定义和使用4.2多态astudentagraduatestudentagraduatestudent:Tom

对象造型

把一个类的子类引用赋值给父类变量,称为向上造型。例如:

Students=newGraduateStudent();

把父类对象赋值给子类对象需要强制类型转换,称为向下造型。向下造型必须满足这样一个前提条件:父类对象必须是从子类对象向上造型过来的。4.2多态

对象造型机制必须遵守下面3条原则:(1)类对象只能转换为有继承关系的子类或父类对象,不能转换为没有继承关系的类的实例。(2)一个类的实例也是其所有基类的实例。(3)对象转换为接口的条件是,其类或某个父类实现了该接口。[例4-9]对象的向上造型与向下造型4.2多态

动态绑定

由于类之间的继承关系,导致父类和子类中存在同名的方法,对于具有动态类型的对象,在运行时应该选择哪个方法来执行呢?此时的规则是:由最近赋值给对象变量的值的类型决定。这就是所谓的方法与方法体的后期绑定,又称为动态绑定。4.2多态【例4-10】动态绑定4.2多态astudentagraduatestudentagraduatestudentagraduatestudent:Tom抽象类的定义[<访问控制修饰符>]abstractclass<抽象类名>[extends<类名>][implements<接口列表>]{

成员变量声明;

….<返回值类型><方法名>(<形参表>)[throws<例外名列表>]{……}abstract<返回值类型><方法名>(<形参表>)[throws<例外名列表>]}4.3抽象类

抽象类的使用由于抽象类是对一种具体概念的抽象,因此,抽象类不能被实例化。定义抽象类的目的是要依据它的格式来扩展出新的类,因此,抽象类定义了没有具体实现的抽象方法,而将这些具体实现保留到从抽象类派生出的新类中定义。4.3抽象类[例4-11]使用抽象类4.3抽象类Rectangle:LineColor=blue,FillColor=yellow,Width=20,Height=10Circle:LineColor=red,FillColor=green,Radius=5.5

为了既能够实现多重继承的功能,又不希望引入多重继承的复杂性和低效率,Java提供了接口(interface)。接口是用来实现多重继承功能的一种结构,它在语法上与类相似,接口中有属性和方法,接口间可以形成继承关系。

4.4接口接口的定义[public]interface<接口名>[extends<父接口列表>]{[public][static][final]<属性数据类型><属性名>=<属性值>;

…[public][abstract]<返回值类型><方法名>(<形参表>)[throws<异常列表>];

…}4.4接口

interfaceEditShape{finalStringS=“SUNW”;

…voidchangeFont();}

接口的定义与类的定义非常相似,但与类不同,接口之间可以多重继承,即一个接口可以继承多个接口。

4.4接口

接口的实现

类的声明中用implements关键字来表示一个类实现了某个接口。

[<类修饰符>]class<类名>[extends<父类名>][implements<接口列表>][例4-13]接口的实现4.4接口

接口的多态

接口把方法描述与方法实现分开,不同的实现类对同一个方法有不同的实现方式,但对外具有一个统一的接口,在运行时根据具体实现类的实现展现不同的功能。4.4接口【例4-14】使用接口4.4接口上机考试标准化考试Chinses课的考试

内部类指在一个类的类体内部定义的类。内部类所在的类称为外包类。内部类有多种形式,按照内部类是否含有显示的类名,可以将内部类分为实名内部类和匿名内部类。4.5内部类

实名内部类

1.定义格式

[<类修饰符>]class<类名>[extends<父类名>][implements<接口名列表>]{

类体

}4.5内部类

由于内部类被看作是类的成员,因此内部类的修饰符与类成员的修饰符相似,可以用private、protected、static等修饰。

[例4-15]简单、直观的实名内部类4.5内部类4.5内部类2.使用方式在外包类的类体中使用实名内部类时:实名内部类名对象名=new实名内部类名(构造方法参数列表);

在外包类之外的其他类的类体中使用该外包类的实名内部类:外包类名.内部类名对象名=new外包类名(参数列表).new内部类名(参数列表);

在访问实名内部类的静态成员属性和静态成员方法时:

[外包类名.]实名内部类.静态属性名;

[外包类名.]实名内部类.静态方法名(参数列表);[例4-16]实名内部类的使用4.5内部类

匿名内部类

匿名内部类不具有类名,不能具有抽象方法和静态方法,并且不能派生出子类。

1.定义格式

new父类名(父类的构造方法参数列表){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论