《教学课件第五章面向对象高级特性》由会员分享,可在线阅读,更多相关《教学课件第五章面向对象高级特性(46页珍藏版)》请在金锄头文库上搜索。
1、PPT模板下载:/moban/ 行业PPT模板:/hangye/ 节日PPT模板:/jieri/ PPT素材下载:/sucai/PPT背景图片:/beijing/ PPT图表下载:/tubiao/ 优秀PPT下载:/xiazai/ PPT教程: /powerpoint/ Word教程: /word/ Excel教程:/excel/ 资料下载:/ziliao/ PPT课件下载:/kejian/ 范文下载:/fanwen/ 试卷下载:/shiti/ 教案下载:/jiaoan/ 字体下载:/ziti/ 教学课件第五章 面向对象高级特性JavaJava程序设计基础程序设计基础第第5章章深入讨论类深入讨
2、论类 (续续)5.4包与访问控制修饰符包与访问控制修饰符 5.3抽象类与接口抽象类与接口 5.2继承继承 5.1表现多态:方法重载表现多态:方法重载 5.1 表现多态:方法重载表现多态:方法重载 v面向对象编程的多态特征,简单的说就是“对外一个接口,内部多种实现”。有时候,一种功能可能会有多种不同的实现方式。vJava支持方法重载(overload),可以在同一个类中定义多个名字相同但参数不同的方法。那么同一个方法名就是对外的统一接口,参数不同导致内部实现也不同,方法重载是面向对象编程多态特征的一种表现形式。v方法重载是编译时的多态,编译器在编译时刻确定具体调用哪个被重载的方法。 5.1 表现
3、多态:方法重载表现多态:方法重载(续续) v如何定义和调用重载的方法 在Java中,定义重载的方法必须遵循以下原则:方法名相同,包括大小写。方法的参数列表必须不同,也就是参数的类型、个数、顺序至少有一项不同。编译器将参数列表的不同作为重载的判定依据。方法的返回类型、修饰符可以相同,也可以不同,它们不作为重载的判定依据。5.1 表现多态:方法重载表现多态:方法重载(续续) v构造方法的重载 构造方法也可以重载,这样在创建对象时可以调用不同版本的构造方法来进行初始化操作。在构造方法中可以使用this关键字调用其它版本的构造方法,减少重复编码。v需要注意的是:重载构造方法时,若要使用this调用其它
4、版本的构造方法,则该this调用语句必须作为构造方法的方法体中的第一条语句。 5.2 继承继承 v继承是实现代码重用的一种有力手段。如果有多个类具有一些相同的属性和方法,可以将这些相同的属性和方法抽象出来定义为一个父类,在父类中定义这些属性和方法,则具有这些属性和方法的其它类可以从这个父类派生出来,不必再重新定义这些属性和方法,称这些派生而来的类为子类。 5.2 继承继承(续续) v类的继承 在继承关系中,被继承的类称为父类 、超类或基类,其中定义了子类所共有的属性和方法。由继承方式创建的类称为子类,子类将父类的属性和方法继承过来,不必重新定义,并且可根据需要增加新的属性和方法。Java的所有
5、类都直接或间接地继承自java.lang.Object类。类定义没有用extends继承某个类时,实际上隐式继承了Object类。 5.2 继承继承(续续) v类的继承(续) 在继承关系中,被继承的类称为父类 、超类或基类,其中定义了子类所共有的属性和方法。由继承方式创建的类称为子类,子类将父类的属性和方法继承过来,不必重新定义,并且可根据需要增加新的属性和方法。Java的所有类都直接或间接地继承自java.lang.Object类。类定义没有用extends继承某个类时,实际上隐式继承了Object类。 5.2 继承继承(续续) v类的继承(续) 5.2 继承继承(续续) v类的继承(续)J
6、ava中类的继承用关键字extends实现,如下所示: class SonClass extends SuperClass 5.2 继承继承(续续) vsuper关键字 v在继承关系中,也存在类似的问题:若子类中定义了与父类同名的成员变量,则父类的成员变量被隐藏。若子类的方法中定义了与父类成员变量同名的局部变量,则父类的成员变量被隐藏。若子类中定义了与父类相同的成员方法(同方法名,同参数列表,同返回类型) ,则父类方法被覆盖,在子类范围内,父类方法不可见。 5.2 继承继承(续续) vsuper关键字(续) 解决继承关系中类变量或方法不可见的问题,需要使用关键字super。 super可以用来
7、引用继承自父类的成员。super的使用有如下几种形式:super.变量名:引用父类成员变量。super.方法名(参数列表):调用父类成员方法。super(参数列表):调用父类构造方法,在子类构造方法中调用父类的构造方法以实现对继承自父类的成员变量的初始化, 5.2 继承继承(续续) v继承中的final修饰符 出于安全考虑,类的实现细节不允许被改动,或者不允许子类覆盖父类的某个方法,这时候就可以对类或成员方法使用final修饰符。 final有不可改变的含义,可以用于修饰类、成员方法以及成员变量。 5.2 继承继承(续续) v继承中的final修饰符(续) 定义类时,在class关键字前可以加
8、上final修饰符,则这个类将不能再派生子类,即不能被其它类所继承。例如: public final class A 则类A不可被继承。声明类的成员方法时,在返回类型前可以加上final修饰符,则方法所属的类被继承时,这个方法不会被重写。例如: public final void method() 5.2 继承继承(续续) v继承中的final修饰符(续) final修饰成员变量与继承无关,它表示的是变量一经赋值,其值将不能改变,也就是通过final可以定义常量,常量名一般全部大写。例如: final int MAX_NUM=100;如果程序中试图修改由final修饰的MAX_NUM的值,将会
9、产生编译错误。 5.3 抽象类与接口抽象类与接口 v抽象类与抽象方法 vJava中可以用abstract修饰符修饰类和成员方法。用abstract修饰的类为抽象类。在类的继承体系中,抽象类常位于顶层。抽象类不能被实例化,即不能创建抽象类的对象。用abstract修饰的方法为抽象方法,抽象方法没有方法体,一般用来描述具有什么功能,而不提供具体的实现。5.3 抽象类与接口抽象类与接口(续续) v抽象类与抽象方法(续) v以下代码中AbstractClass为抽象类,它包含一个抽象方法method1()和一个具体方法(非抽象方法)method2()。 public abstract class Ab
10、stractClasspublic abstract void method();/抽象方法,无方法体 public void method2()/具体方法,即是方法体为空,也不能省略5.3 抽象类与接口抽象类与接口(续续) v抽象类与抽象方法(续) v抽象类和抽象方法有一些注意事项: 抽象类中可以包含构造方法,成员变量,具体方法,甚至可以没有抽象方法,但包含了抽象方法的类必须定义为抽象类,否则编译出错。 没有抽象的构造方法,也没有静态的抽象方法,即static和abstract不能一起修饰方法。 抽象类与抽象方法不能被final修饰。 抽象类不可实例化。 5.3 抽象类与接口抽象类与接口(续
11、续) v接口 Java中的接口(interface)使抽象类的概念更深入一层。外界观察一个对象,主要关注对象提供了什么服务,至于服务在对象内部是如何具体实现的,外部并不关心。对象所提供的服务由方法实现,因此,对象中所有外界能使用的方法的集合,就构成了对象与外界进行交互的“界面”,即接口。 5.3 抽象类与接口抽象类与接口(续续) v接口(续) 接口的定义格式: public interface InterfaceName extends SuperInterface /接口体 5.3 抽象类与接口抽象类与接口(续续) v接口(续) 接口体包含成员变量和成员方法,但有一些限制: 接口中的成员变量
12、默认都是public、static、final类型的,即都是静态常量,必须显式地进行初始化。接口中的方法默认都是public、abstract类型的,即都是抽象方法,无方法体,不提供具体实现。5.3 抽象类与接口抽象类与接口(续续) v接口(续) 以下代码就是一个合法的接口定义:public interface Computable public static final double PI = 3.1415926;public abstract double sum( double x, double y);public double sub(double x, double y);/即是缺
13、省abstract,系统会自动添加接口没有构造方法,不能创建接口的对象。接口没有构造方法,不能创建接口的对象。 5.3 抽象类与接口抽象类与接口(续续) v接口(续) 类声明时可以使用implements子句来表示实现某个或某些接口。接口声明了一些行为规范,实现接口的类将具有这些行为规范,但必须提供所有行为的实现细节,即实现接口的类必须重写接口中的所有抽象方法。 5.3 抽象类与接口抽象类与接口(续续) v接口(续) 如果一个类实现多个接口,各个接口之间用逗号“,”分隔。类实现接口的格式如下: class 类名 implements 接口名 , 接口2, / 各个方法的具体实现 5.3 抽象类
14、与接口抽象类与接口(续续) v接口实现多继承效果 vJava是单继承的,一个类只能有一个直接父类,但利用接口,可以达到多继承的效果。因为一个类可以实现多个接口,就继承了所实现的所有接口中的静态常量,以及所有的抽象方法,若实现这些接口的类不是抽象类,则这个类要提供所有这些方法的实现。 5.3 抽象类与接口抽象类与接口(续续) v接口实现多继承效果 (续)v设有如下的类定义: class A implements B,C,D /必须重写接口B、C、D中的抽象方法 v则,类A继承了接口B、C、D的所有静态常量和所有方法,但在类A中必须重写这些方法,具体实现接口的行为。 5.3 抽象类与接口抽象类与接
15、口(续续) v接口实现多继承效果 (续)v创建类时,还可以让这个类既继承某个类,又实现某个或某些接口,让这个类具备更多的属性和行为,达到多继承的效果。v设有如下的类定义: class A extends B implements C,D /必须重写接口C、D中的方法 v则类A将继承类B的非private的成员变量、成员方法,继承接口C、D的静态常量,并要实现接口C、D的所有方法。 5.3 抽象类与接口抽象类与接口(续续) v接口实现多继承效果 (续)v接口还可以继承接口,而且与类继承类不同的是,一个接口可以利用extends继承多个接口,也是多继承效果的一种体现。v设有如下的接口定义: int
16、erface A extends B,C /接口A的静态常量和抽象方法 v则:B、C 必须都是接口,接口A继承了接口B、C的所有静态常量和抽象方法,但并不实现任何的方法。 5.3 抽象类与接口抽象类与接口(续续) v接口实现多继承效果 (续)v已有如上所示的接口A,那么如下的类定义: class ClassA implements A /实现A的所有抽象方法 v类ClassA实现接口A就要实现其所有的抽象方法,这些方法除了接口A自身包含的抽象方法之外,还包括接口A从所有父接口继承而来的抽象方法。 5.4 包与访问控制修饰符包与访问控制修饰符 v包的概念与作用 Java中,包(package)是
17、相关类与接口的一个集合,是一种管理和组织类(包括类和接口)的机制。 简单的来看,包就相当于是一个目录,其中可以包含类、接口、子包(相当于子目录)。其作用包括:一是能减少类的名称的冲突问题,二是能分门别类地组织各种类,三是有助于实施访问权限控制,当位于不同包的类相互访问时,会受到访问权限的约束。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包的概念与作用 (续)v典型的,Java的类库就是按有层次的包的方式组织的。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包的概念与作用 (续)vJava的一些基本包如下所示: java.lang包:核心语言包,包含System类(系统
18、类)、String类(字符串类)、Exception类(异常类)等,这些类是编写Java程序经常要使用的。这个包由JVM自动引入,在编写程序时可以直接使用这个包中的类,而不必用import语句引入。java.awt包:抽象窗口工具集包,包含了用于构建图形用户界面(GUI)程序的基本类和绘图类。5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包的概念与作用 (续)vJava的一些基本包如下所示: java.io包:输入/输出包,包含各种输入流类和输出流类,用于实现程序与外界的数据交换。java.util包:使用工具包,提供一些实用类,如Date类(日期类),Random类(随机数类),C
19、ollection类(集合类)等。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包声明语句package 包声明语句用于将Java的类放到特定的包中,对应的,类的.class文件组织到包结构映射而来的目录结构中。 Java利用package关键字声明包,格式如下:package packageName; 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包声明语句package(续) v使用包声明语句时,需要注意如下事项:v包声明语句(package语句)必须出现在Java源文件的第一行(忽略注释行)。v如果有包声明语句的Java源文件中包含了多个类或接口的定义,则这些类和接
20、口都将位于声明的这个包中。v一个Java源文件只能包含一个package语句。v如果Java文件中没有package语句,则这个文件中的类位于默认包,默认包没有名字。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包引入语句import v位于同一个包(即同一个目录)中的类可以直接相互访问,不需要做额外操作。但,如果一个类要访问来自于另外一个包中的类,则需要通过import语句将其需要访问的类引入,否则无法使用别包中的类,编译时会报错。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v包引入语句import vJava使用import关键字来引入类,格式如下:import 完
21、整类名;v注意:此处的类名要使用包表示法。import语句要位于package语句之后,类或接口定义之前。 5.4 包与访问控制修饰符包与访问控制修饰符(续续) v访问控制符 v访问控制符,可以对被其修饰的元素进行访问权限控制,这种控制也与包相关。类中的成员的可见性(或叫可访问性)取决于它的访问控制符和它所在的包和类的性质。vJava的访问控制符有4种:public 、protected、default和private。其中,default缺省访问控制符,指的是不添加任何访问控制的关键字。访问控制符可以修饰类,也可以修饰类的成员,访问控制符应放在类、变量或方法声明的最前面。 5.4 包与访问控
22、制修饰符包与访问控制修饰符(续续) v访问控制符 (续)(续)5.4 包与访问控制修饰符包与访问控制修饰符(续续) v访问控制符 (续)(续)5.4 包与访问控制修饰符包与访问控制修饰符(续续) v访问控制符 (续)(续)private:意为私有的,只能修饰类的成员,不能修饰类,由private修饰的成员只能在类的内部访问。一般,可以对希望隐藏的内部数据或内部方法添加private关键字,以保护敏感信息或隐藏功能的实现细节。 default:缺省访问控制符,既可以修饰类的成员,也可以修饰类,由default修饰的元素都是同一个包中的类可以访问。5.4 包与访问控制修饰符包与访问控制修饰符(续续
23、) v访问控制符 (续)(续)protected:受保护的,只能修饰类的成员,代表的可访问范围比default大,除了本包中可见外,别包中的子类也可以访问到protected修饰的成员,但别包中的非子类就不能访问protected修饰的成员了。 public:公共的,所代表的可访问范围是最广的,可以修饰类,也可以修饰类的成员,被public修饰的元素在本包和别包中都是可见的。被public修饰的类在别包中可见,可以创建其对象,或是派生其子类。被public修饰的成员在别包中也可见,可以访问public的变量或是调用public的方法。本章小结本章小结 v用new创建类的对象,开辟对象的存储空间
24、。Java有垃圾回收机制能自动清理无用的对象。v若类中未定义构造方法,则会自动添加一个缺省的无参构造方法。v同种类型的对象可以相互赋值,这种赋值是引用赋值,使得2个对象名可以指向同一个对象。v若对象作为方法参数,则实参传给形参的是对象的引用,使得形参与实参指向同一个对象,则利用形参对对象进行修改能确实生效。v若有类的成员变量与方法的局部变量同名,则局部变量会将成员变量屏蔽掉,可以使用this引用来显式引用类的成员变量,解决名称冲突问题。v类的静态成员由static修饰,随类加载,不依赖于类对象的存在与否,静态方法中不能使用实例变量或实例方法。类的静态成员利用类名进行引用。本章小结(续)本章小结
25、(续) v类中可以定义多个方法名相同但参数列表不同的方法,称为方法重载。方法重载是多态性的一种体现。v继承机制允许从现有的类中派生新类,Java中继承利用关键字extends实现,Java是单继承的,一个子类只能有一个直接父类。Java的所有类都是直接或简介地从java.lang.Object派生而来的。v可以使用final关键字修饰类,防止类被继承;可以使用final修饰方法,防止方法被重写;可以使用final修饰变量,则该变量只能赋值1次,成为常量。v接口定义一些行为规范,实现接口的类具有这些行为规范,但要提供具体的实现,即要重写接口中的所有方法。本章小结(续)本章小结(续) v一个类可以实现多个接口,可以既继承类又实现接口,接口可以继承多个接口,这些都可以达到多继承的效果。vJava利用包分类管理和组织大量的类,利用package语句声明包,则类的.class文件将被组织到包结构映射而来的目录结构中。包声明语句必须位于Java源文件的第一行。v使用import可以引入其它包中的类,除java.lang包不需要引入外,在使用系统提供的其它包中类时,需要引入。vJava提供了4种访问控制符:private、default、protected和public,它们可以修饰类或类的成员,同包相结合,可以实现对类或类的成员的访问权限的控制。