Java面向对象的程序设计.ppt

上传人:wuy****n92 文档编号:70791983 上传时间:2023-01-28 格式:PPT 页数:74 大小:288KB
返回 下载 相关 举报
Java面向对象的程序设计.ppt_第1页
第1页 / 共74页
Java面向对象的程序设计.ppt_第2页
第2页 / 共74页
点击查看更多>>
资源描述

《Java面向对象的程序设计.ppt》由会员分享,可在线阅读,更多相关《Java面向对象的程序设计.ppt(74页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第六章 Java语言中的面向对象特征第六章 Java语言中的面向对象特征6.1 类6.2 对象6.3 包6.4 面向对象特征6.5 抽象类和接口6.1 类6.1.1 类的声明6.1.2 成员变量6.1.3 成员方法6.1.4 方法重载6.1.5 构造方法6.1.6 finalize()方法6.1 类类l l从程序设计的角度看,类是面向对象程序中从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种最基本的程序单元。类实质上定义的是一种数据类型。类中包含一组变量和一组方法数据类型。类中包含一组变量和一组方法(函数函数),利用它可以创建对象。,利用它可以创建对象。l l类是对

2、象的模板类是对象的模板(template),对象是类的一,对象是类的一个实例个实例(instance)。类类变量变量方法方法实例化实例化对象对象6.1.1 类的声明格式:格式:属性属性属性属性 class class 继承说明继承说明继承说明继承说明 接口说明接口说明接口说明接口说明 类体类体类体类体 l l类的属性:类的属性:类的属性:类的属性:public abstract|final public abstract|final l l继承说明:继承说明:继承说明:继承说明:extends extends l l接口说明:接口说明:接口说明:接口说明:implements implemen

3、ts l l类类类类 体:体:体:体:成员变量成员变量成员变量成员变量 成员方法成员方法成员方法成员方法 6.1.2 成员变量格式:修饰符 变量类型 变量名称=初值;l l变量类型:简单类型、类、接口、数组变量类型:简单类型、类、接口、数组l l修饰符:修饰符:public|protected|private static final transient volatile 说明:说明:说明:说明:访问控制修饰符访问控制修饰符访问控制修饰符访问控制修饰符 :public protected private public protected private 非访问控制修饰符非访问控制修饰符非访问控

4、制修饰符非访问控制修饰符 static static:类变量(或称静态变量),否则为实例变量:类变量(或称静态变量),否则为实例变量:类变量(或称静态变量),否则为实例变量:类变量(或称静态变量),否则为实例变量 final final:常量:常量:常量:常量 transient transient:暂时性变量(和序列化有关):暂时性变量(和序列化有关):暂时性变量(和序列化有关):暂时性变量(和序列化有关)volatile volatile:共享变量(和线程有关):共享变量(和线程有关):共享变量(和线程有关):共享变量(和线程有关)6.1 6.1 类类类类6.1.3 成员方法 1.1.方法

5、声明格式:方法声明格式:方法声明格式:方法声明格式:修饰符修饰符修饰符修饰符 返回类型返回类型返回类型返回类型 方法名方法名方法名方法名(参数列表参数列表参数列表参数列表)例外抛出声例外抛出声例外抛出声例外抛出声明明明明 方法体方法体方法体方法体 说明:说明:说明:说明:l l返回类型:返回类型:返回类型:返回类型:简单类型、类、接口、数组简单类型、类、接口、数组简单类型、类、接口、数组简单类型、类、接口、数组(必须写出)(必须写出)(必须写出)(必须写出)l l修饰符:修饰符:修饰符:修饰符:public|protected|private static public|protected|p

6、rivate static final|abstract native synchronized final|abstract native synchronized l l参数列表:参数列表:参数列表:参数列表:(任意)类型(任意)类型(任意)类型(任意)类型 名称名称名称名称 ,类型类型类型类型 名称名称名称名称 l l例外抛出声明:例外抛出声明:例外抛出声明:例外抛出声明:throws throws 例外类型例外类型例外类型例外类型l l方法体:方法体:方法体:方法体:局部变量定义以及局部变量定义以及局部变量定义以及局部变量定义以及JavaJava语句语句语句语句6.1 6.1 类类类类

7、6.1.4 方法的重载(overload)重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。注意:注意:方法类型不参与匹配。通常只有功能相似的方法重载才有价值6.1 6.1 类类类类6.1.4 方法的重载class MethodOverloading class MethodOverloading void receive(int i)void receive(int i)System.out.println(“received int data:”+i);System.out.println(“received int data:”+i);void receive

8、(String s)void receive(String s)System.out.println(“received string data:”+s);System.out.println(“received string data:”+s);void receive(int i,int j)void receive(int i,int j)System.out.println(“received two int datas:”+i+”“+j);System.out.println(“received two int datas:”+i+”“+j);class MethodOverload

9、ingTest class MethodOverloadingTest public static void main(String args)public static void main(String args)MethodOverloading mo=new MethodOverloading();MethodOverloading mo=new MethodOverloading();mo.receive(1);mo.receive(1);mo.receive(“1”);mo.receive(“1”);mo.receive(1,2);mo.receive(1,2);结果结果结果结果(编

10、译、执行编译、执行编译、执行编译、执行):received int data:1received int data:1received string data:1received string data:1received two int datas:1 2received two int datas:1 26.1 6.1 类类类类6.1.4 方法重载注意事项:注意事项:注意事项:注意事项:l l只有返回类型不同,不能实现重载只有返回类型不同,不能实现重载只有返回类型不同,不能实现重载只有返回类型不同,不能实现重载(编译出错编译出错编译出错编译出错)如:如:void receive(int i

11、)void receive(int i)int receive(int i)int receive(int i)return(1);return(1);l l如果调用不存在的方法,编译出错如果调用不存在的方法,编译出错如:如:receive(1.23)receive(1.23)6.1 6.1 类类类类6.1.5 构造方法构造方法:是一种特殊方法,其主要功能是对创建构造方法:是一种特殊方法,其主要功能是对创建构造方法:是一种特殊方法,其主要功能是对创建构造方法:是一种特殊方法,其主要功能是对创建的对象进行初始化。的对象进行初始化。的对象进行初始化。的对象进行初始化。构造方法特点:构造方法特点:构

12、造方法特点:构造方法特点:l l方法的名字必须和所在类同名,而且没有返回方法的名字必须和所在类同名,而且没有返回方法的名字必须和所在类同名,而且没有返回方法的名字必须和所在类同名,而且没有返回类型。类型。类型。类型。l l构造方法主要用于为类的对象定义初始化状态。构造方法主要用于为类的对象定义初始化状态。构造方法主要用于为类的对象定义初始化状态。构造方法主要用于为类的对象定义初始化状态。l l我们不能直接调用构造方法,必须通过我们不能直接调用构造方法,必须通过我们不能直接调用构造方法,必须通过我们不能直接调用构造方法,必须通过newnew关关关关键字来自动调用,从而创建类的实例。键字来自动调用

13、,从而创建类的实例。键字来自动调用,从而创建类的实例。键字来自动调用,从而创建类的实例。l lJavaJava的类都要求有构造方法,如果没有定义构的类都要求有构造方法,如果没有定义构的类都要求有构造方法,如果没有定义构的类都要求有构造方法,如果没有定义构造方法,造方法,造方法,造方法,javajava编译器会为我们提供一个缺省的编译器会为我们提供一个缺省的编译器会为我们提供一个缺省的编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。构造方法,也就是不带参数的构造方法。构造方法,也就是不带参数的构造方法。构造方法,也就是不带参数的构造方法。缺省构造方法n n当我们用缺省的构造方法初

14、始化对象当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员时,系统用默认值初始化对象的成员变量。变量。n n各种数据类型的默认值为:各种数据类型的默认值为:数值型0booleanfalsechar0对象null例例(方法名、重载、方法名、重载、this)this):class Pointclass Point int x,y;int x,y;Point()Point()x=0;x=0;y=0;y=0;Point(int x,int y)Point(int x,int y)this.x=x;this.x=x;this.y=y;this.y=y;特殊变量thisl lthis变量代表

15、对象本身变量代表对象本身l l当类中有两个同名变量,一个属于类(类当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用方法(方法中的局部变量),使用this区分区分成员变量和局部变量。成员变量和局部变量。l l使用使用this简化构造函数的调用。简化构造函数的调用。特殊变量thisl l关于实例方法和实例数据成员的进一步说明关于实例方法和实例数据成员的进一步说明关于实例方法和实例数据成员的进一步说明关于实例方法和实例数据成员的进一步说明 一个类所有的实例(对象)调用的成员方法在内一个类所有的实例(对象)调用的

16、成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。在着一份拷贝。thisthis变量允许相同的实例方法为不变量允许相同的实例方法为不同的对象工作。同的对象工作。每当调用一个实例方法时,每当调用一个实例方法时,每当调用一个实例方法时,每当调用一个实例方法时,thisthis变量将被设置成引用该实例方法的特定的类对象。变量将被设置成引用该实例方法的特定的类对象。变量将被设置成引用该实例方法的特定的类对象。变量将被设置成引用该实例方法的特定的类对象。方法的代

17、码接着会与方法的代码接着会与方法的代码接着会与方法的代码接着会与thisthis所代表的对象的特定数所代表的对象的特定数所代表的对象的特定数所代表的对象的特定数据建立关联。据建立关联。据建立关联。据建立关联。6.1.6 finalize方法l lfinalize方法方法 对象被释放时自动调用的方法(类似于对象被释放时自动调用的方法(类似于对象被释放时自动调用的方法(类似于对象被释放时自动调用的方法(类似于C+C+的的的的析构方法),这种方法可以不定义。析构方法),这种方法可以不定义。析构方法),这种方法可以不定义。析构方法),这种方法可以不定义。类方法:在方法类型前加类方法:在方法类型前加“s

18、tatic”“static”定义定义 实例方法实例方法6.1 6.1 类类类类注意l l只有方法能对成员变量进行操作,成员变量在定义的同时可以赋初值;l l实例方法可以操作实例变量和类变量,而类方法只能操作类变量;l l一个类中的方法可以相互调用。返回6.2 对象6.2.1 6.2.1 对象的生命周期:包括创建、使用和删除对象的生命周期:包括创建、使用和删除对象的生命周期:包括创建、使用和删除对象的生命周期:包括创建、使用和删除1.1.对象的创建过程:对象的创建过程:对象的创建过程:对象的创建过程:l l包含三方面的内容:包含三方面的内容:包含三方面的内容:包含三方面的内容:声明、实例化(内存

19、分配)、初始声明、实例化(内存分配)、初始声明、实例化(内存分配)、初始声明、实例化(内存分配)、初始化(调用构造方法)化(调用构造方法)化(调用构造方法)化(调用构造方法)l l定义格式:定义格式:定义格式:定义格式:类名类名类名类名 对象名对象名对象名对象名=new=new 类名类名类名类名(参数列表参数列表参数列表参数列表););l lnewnew关键字的作用关键字的作用关键字的作用关键字的作用l l为对象分配内存空间。为对象分配内存空间。为对象分配内存空间。为对象分配内存空间。l l引起对象构造方法的调用。引起对象构造方法的调用。引起对象构造方法的调用。引起对象构造方法的调用。l l为

20、对象返回一个引用为对象返回一个引用为对象返回一个引用为对象返回一个引用。注意:注意:l lJavaJava语言中,对象的实例化必须通过语言中,对象的实例化必须通过newnew运算符,这点运算符,这点与与C+C+语言明显不同,没有经过语言明显不同,没有经过newnew运算符实例化的对运算符实例化的对象是空对象,其本质与空指针相同。象是空对象,其本质与空指针相同。6.2 对象2.2.对象的使用:通过对象的使用:通过对象的使用:通过对象的使用:通过 .运算符访问成员变量或方法。运算符访问成员变量或方法。运算符访问成员变量或方法。运算符访问成员变量或方法。例例例例6.56.5:二维坐标上的点及其相关方

21、法:二维坐标上的点及其相关方法:二维坐标上的点及其相关方法:二维坐标上的点及其相关方法(取取取取x x、y y坐标,移动,新坐标,移动,新坐标,移动,新坐标,移动,新建对称点建对称点建对称点建对称点)3.3.对象的清除:当不存在对一个对象的引用,该对象便成为无对象的清除:当不存在对一个对象的引用,该对象便成为无对象的清除:当不存在对一个对象的引用,该对象便成为无对象的清除:当不存在对一个对象的引用,该对象便成为无用对象,系统通过垃圾回收线程自动回收其所占用的内存区用对象,系统通过垃圾回收线程自动回收其所占用的内存区用对象,系统通过垃圾回收线程自动回收其所占用的内存区用对象,系统通过垃圾回收线程

22、自动回收其所占用的内存区.例如:例如:Point pt=new Point();Point pt=new Point();pt=null;pt=null;或:或:Point pt1=new Point();Point pt1=new Point();Point pt2=new Point(12,3);Point pt2=new Point(12,3);pt1=pt2;pt1=pt2;/原先的原先的p1p1对象被自动回收,对象是引用型变量(类似指针)对象被自动回收,对象是引用型变量(类似指针)或:或:void garbageCollection()void garbageCollection()

23、Point pt=new Point();Point pt=new Point();/方法调用结束后方法调用结束后PointPoint对象被自动回收对象被自动回收6.2 6.2 对象对象对象对象6.2 对象l l内存分配例:Point pt1=new Point();Point pt1=new Point();Point pt2=new Point(12,3);Point pt2=new Point(12,3);Pt1=pt2;Pt1=pt2;0 x99f3110 x33400900312pt1pt20 x3340096.2 对象6.2.2 对象中的方法调用l l当方法调用时,传递参数的类型既

24、可以是简单数据类型,也可以是复合数据类型(数组、类或接口)。l l在Java中,传参时,都是以传值的方式进行。l l对于基本数据类型,传递的是数据的拷贝;对于复合类型,传递的引用的拷贝。例:(书中例例:(书中例例:(书中例例:(书中例6.16.1)public class PassTestpublic class PassTest void changeInt(int value)void changeInt(int value)value=55;value=55;public static void main(String args)public static void main(Strin

25、g args)PassTest pt=new PassTest();PassTest pt=new PassTest();int val=11;int val=11;pt.changeInt(val);pt.changeInt(val);System.out.println(val=+val);System.out.println(val=+val);valmainchangeInt11(55)value11例:(与上例对照)例:(与上例对照)例:(与上例对照)例:(与上例对照)public class PassTestpublic class PassTest float ptValue;f

26、loat ptValue;public void change(PassTest ref)public void change(PassTest ref)ref.ptValue=99f;ref.ptValue=99f;public static void main(String args)public static void main(String args)PassTest pt=new PassTest();PassTest pt=new PassTest();pt.ptValue=101f;pt.ptValue=101f;System.out.println(“Original ptVa

27、lue is”+pt.ptValue);System.out.println(“Original ptValue is”+pt.ptValue);pt.change(pt);pt.change(pt);System.out.println(“ptValue after Change is”+pt.Value);System.out.println(“ptValue after Change is”+pt.Value);ptmainchange栈内存栈内存堆内存堆内存PassTest类的对象类的对象ref0088:46600088:46600088:46606.3 包(package)l l问题

28、:由于问题:由于Java编译器为每个类生成一个字编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名节码文件,且文件名与类名相同,因此同名的类有可能会发生冲突。的类有可能会发生冲突。例:例:class SameNameclass SameName A.javaA.java:class SameNameclass SameName B.javaB.java:编译编译Samename.class编译编译Samename.class不允许放在不允许放在同一个文件夹同一个文件夹6.3 包(package)l l解决方法:将编译得到的字节代码文件存解决方法:将编译得到的字节代码文件存放在不同的

29、子文件夹中,并把相对路径和放在不同的子文件夹中,并把相对路径和类名混合在一起,做为类的完整名。类名混合在一起,做为类的完整名。例:例:SameName.classSameName.class文件夹P1SameName.classSameName.class文件夹P2允许放在同一个文件夹P1.SameName类P2.SameName类6.3.1 package语句语句l l创建包使用package语句。格式为:package pkg1.pkg2.pkg3;package pkg1.pkg2.pkg3;例如:例如:package java.awt.image;package java.awt.im

30、age;l l注意:注意:packagepackage语句必须是文件中的第一条语句。也就是语句必须是文件中的第一条语句。也就是说,在说,在packagepackage语句之前,除了空白和注释之外不语句之前,除了空白和注释之外不能有任何语句。能有任何语句。如果不加如果不加packagepackage语句,则指定为缺省包或无名包。语句,则指定为缺省包或无名包。包对应着文件系统的目录层次结构。包对应着文件系统的目录层次结构。在在packagepackage语句中,用语句中,用“.”“.”来指明包(目录)的来指明包(目录)的层次。层次。6.3 6.3 包包包包l l在当前目录下生成包 javac d.

31、Test.javal l在指定目录下生成包 javac d d:Test.java6.3.2 import语句 l limport语句用于引入需要的包。一般格式为:语句用于引入需要的包。一般格式为:import pkg1.pkg2.pkg3.classname|*;import pkg1.pkg2.pkg3.classname|*;例如:例如:例如:例如:引入包中的类引入包中的类 import java.io.File;import java.io.File;引入整个包引入整个包 import java.io.*;import java.io.*;l l如果不用如果不用如果不用如果不用impo

32、rtimport语句,需要在使用类的地方书写完语句,需要在使用类的地方书写完语句,需要在使用类的地方书写完语句,需要在使用类的地方书写完整的包名,所以一般不采用这种方法。整的包名,所以一般不采用这种方法。整的包名,所以一般不采用这种方法。整的包名,所以一般不采用这种方法。l l在同一包中的类可以互相引用,无需在同一包中的类可以互相引用,无需在同一包中的类可以互相引用,无需在同一包中的类可以互相引用,无需importimport语句语句语句语句6.3 6.3 包包包包6.3.2 import语句l l使用import语句可以引入类库中的类例如:import java.util.*;import

33、java.util.*;class myDate extends Date class myDate extends Date 也可以直接引入该类:class myDate extends java.util.Dateclass myDate extends java.util.Date 6.3 6.3 包包包包6.3.3 Java类库介绍1.1.java.langjava.lang包包包包 包含一些包含一些包含一些包含一些JavaJava语言的基本类与核心类,如语言的基本类与核心类,如语言的基本类与核心类,如语言的基本类与核心类,如StringString、MathMath、IntegerI

34、nteger、SystemSystem和和和和RuntimeRuntime,提供常用的功能,这个包中的所有,提供常用的功能,这个包中的所有,提供常用的功能,这个包中的所有,提供常用的功能,这个包中的所有类是被隐式导入的。类是被隐式导入的。类是被隐式导入的。类是被隐式导入的。2.2.java.iojava.io包包包包 包含一些用作输入输出包含一些用作输入输出包含一些用作输入输出包含一些用作输入输出(I/O)(I/O)处理的类。处理的类。处理的类。处理的类。3.3.Java.utilJava.util包包包包 包含一些实用工具类和数据结构类。包含一些实用工具类和数据结构类。包含一些实用工具类和数

35、据结构类。包含一些实用工具类和数据结构类。4.4.java.awtjava.awt包包包包 包含一些用于编写与平台无关的图形界面包含一些用于编写与平台无关的图形界面包含一些用于编写与平台无关的图形界面包含一些用于编写与平台无关的图形界面(GUI)(GUI)应用程序的类。应用程序的类。应用程序的类。应用程序的类。5.5.java.appletjava.applet包包包包 包含一些用于创建包含一些用于创建包含一些用于创建包含一些用于创建JavaJava小应用程序的类。小应用程序的类。小应用程序的类。小应用程序的类。包包包包 包含用于建立网络连接的类,与包含用于建立网络连接的类,与包含用于建立网络

36、连接的类,与包含用于建立网络连接的类,与java.iojava.io同时使用完成与网络有同时使用完成与网络有同时使用完成与网络有同时使用完成与网络有关的读写。关的读写。关的读写。关的读写。6.3 6.3 包包包包返回6.4 面向对象特性l lJava语言中的面向对象特性:封装性、继承性、多态性。6.4.1 封装性(Encapsulation)l l封装是一种信息隐藏技术,用户只能看到对封装是一种信息隐藏技术,用户只能看到对象封装界面上的信息,而对象内部对于用户象封装界面上的信息,而对象内部对于用户而言是隐藏的。这种而言是隐藏的。这种“黑匣子黑匣子”结构是面向结构是面向对象编程的最基本思想。对象

37、编程的最基本思想。l l封装:是通过对类、成员变量和成员方法施封装:是通过对类、成员变量和成员方法施以一定的访问权限,使得其它类的代码必须以一定的访问权限,使得其它类的代码必须通过适当的接口才能访问。通过适当的接口才能访问。6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性6.4.1 封装性l l类的访问说明符类的访问说明符类的访问说明符类的访问说明符 (1 1)publicpublic (2 2)defaultdefault(不加访问说明符时)(不加访问说明符时)l l类中的成员变量和成员方法的访问说明符,有类中的成员变量和成员方法的访问说明符,有类中的成员变量和成员方法的访问

38、说明符,有类中的成员变量和成员方法的访问说明符,有 (1 1)publicpublic (2 2)protectedprotected (3 3)default (default (不加访问说明符时不加访问说明符时)(4 4)privateprivate 其作用是对类的成员施以一定的访问权限限其作用是对类的成员施以一定的访问权限限其作用是对类的成员施以一定的访问权限限其作用是对类的成员施以一定的访问权限限定,实现类中成员在一定范围内的信息隐藏。定,实现类中成员在一定范围内的信息隐藏。定,实现类中成员在一定范围内的信息隐藏。定,实现类中成员在一定范围内的信息隐藏。6.4.1 封装性例例6.6 通

39、过本例来说明上述的访问权限。通过本例来说明上述的访问权限。6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性publicpublicprotectedprotecteddefaultdefaultprivateprivate同类同类同包同包子类子类通用性通用性不同情形下访问说访问说明符明符6.4.1 封装性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性publicpublicprotectedprotecteddefaultdefaultprivateprivate同类同类同包同包子类子类通用性通用性不同情形下访问说访问说明符明符6.4.1 封装性6.4 6.4

40、 面向对象特性面向对象特性面向对象特性面向对象特性publicpublicprotectedprotecteddefaultdefaultprivateprivate同类同类同包同包子类子类通用性通用性不同情形下访问说访问说明符明符6.4.1 封装性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性publicpublicprotectedprotecteddefaultdefaultprivateprivate同类同类同包同包子类子类通用性通用性不同情形下访问说访问说明符明符6.4.1 封装性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性publicpubli

41、cprotectedprotecteddefaultdefaultprivateprivate同类同类同包同包子类子类通用性通用性不同情形下访问说访问说明符明符6.4.1 封装性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性6.4.1 封装性l l有四种修饰符实现访问权限:有四种修饰符实现访问权限:有四种修饰符实现访问权限:有四种修饰符实现访问权限:privateprivate、默认、默认、默认、默认、protectedprotected和和和和publicpublic。privateprivate:只能被类中的其他成员访问,不能被其他类,:只能被类中的其他成员访问,不能被其

42、他类,:只能被类中的其他成员访问,不能被其他类,:只能被类中的其他成员访问,不能被其他类,包括自身类的子类所访问。包括自身类的子类所访问。包括自身类的子类所访问。包括自身类的子类所访问。默认默认默认默认(没有修饰符没有修饰符没有修饰符没有修饰符):具有包的访问性,可被同一包内的:具有包的访问性,可被同一包内的:具有包的访问性,可被同一包内的:具有包的访问性,可被同一包内的其他类所访问,但在包以外不能访问。其他类所访问,但在包以外不能访问。其他类所访问,但在包以外不能访问。其他类所访问,但在包以外不能访问。protectedprotected:用于类继承场合的访问控制,可以被同一:用于类继承场合

43、的访问控制,可以被同一:用于类继承场合的访问控制,可以被同一:用于类继承场合的访问控制,可以被同一包内其他类以及其他包中该类的子类访问。包内其他类以及其他包中该类的子类访问。包内其他类以及其他包中该类的子类访问。包内其他类以及其他包中该类的子类访问。publicpublic:可以被所有类访问。:可以被所有类访问。:可以被所有类访问。:可以被所有类访问。6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性6.4.2 继承性(Inheritance)l l继承:一个类获取另一个类的所有变量和方法的过程。继承:一个类获取另一个类的所有变量和方法的过程。继承:一个类获取另一个类的所有变量和

44、方法的过程。继承:一个类获取另一个类的所有变量和方法的过程。被继承的类称为父类,由继承而得到的类称为子类。被继承的类称为父类,由继承而得到的类称为子类。被继承的类称为父类,由继承而得到的类称为子类。被继承的类称为父类,由继承而得到的类称为子类。1.创建子类(实现继承)使用关键字extends,声明子类,如:class 子类名 extends 父类名 子类体 如果没有继承任何类,如果没有继承任何类,如果没有继承任何类,如果没有继承任何类,JavaJava默认其父类为默认其父类为默认其父类为默认其父类为 java.lang.Object java.lang.Object 继承是实现代码复用的最主要

45、手段。继承是实现代码复用的最主要手段。继承是实现代码复用的最主要手段。继承是实现代码复用的最主要手段。Java Java中不允许多继承。中不允许多继承。中不允许多继承。中不允许多继承。6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性6.4.2 继承性2.方法的重写和成员变量隐藏方法的重写和成员变量隐藏l l方法重写:方法重写:在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖或方法重写。l l覆盖发生在子类与父类之间。6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性l l成员变量隐藏:如果在子类中,对从父类中继承过来的成成员变量隐藏:如

46、果在子类中,对从父类中继承过来的成成员变量隐藏:如果在子类中,对从父类中继承过来的成成员变量隐藏:如果在子类中,对从父类中继承过来的成员变量又重新定义,声明了与父类同名的变量,称为成员员变量又重新定义,声明了与父类同名的变量,称为成员员变量又重新定义,声明了与父类同名的变量,称为成员员变量又重新定义,声明了与父类同名的变量,称为成员变量隐藏。变量隐藏。变量隐藏。变量隐藏。例如:例如:例如:例如:class A class A int x=3;int x=3;class B extends A class B extends A int x=5;int x=5;l l 处理成员变量隐藏的方法:处

47、理成员变量隐藏的方法:处理成员变量隐藏的方法:处理成员变量隐藏的方法:在子类执行继承父类的操作时,使用继承自父类的在子类执行继承父类的操作时,使用继承自父类的在子类执行继承父类的操作时,使用继承自父类的在子类执行继承父类的操作时,使用继承自父类的变量,子类执行自己定义的操作时,使用自己定义的变量。变量,子类执行自己定义的操作时,使用自己定义的变量。变量,子类执行自己定义的操作时,使用自己定义的变量。变量,子类执行自己定义的操作时,使用自己定义的变量。6.4.2 继承性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性3.super3.superl l特殊变量特殊变量特殊变量特殊变

48、量supersuper,提供了对父类的访问。,提供了对父类的访问。,提供了对父类的访问。,提供了对父类的访问。supersuper的使用:的使用:(1 1)可以使用可以使用可以使用可以使用supersuper访问父类被子类隐藏的变量或覆盖的方法。访问父类被子类隐藏的变量或覆盖的方法。访问父类被子类隐藏的变量或覆盖的方法。访问父类被子类隐藏的变量或覆盖的方法。l l 访问父类被隐藏的成员变量,如访问父类被隐藏的成员变量,如 super.super.l l 用来调用父类中被重写的方法,如用来调用父类中被重写的方法,如:super.super.(););(2 2)每个子类构造方法的第一条语句,都是隐

49、含地调用每个子类构造方法的第一条语句,都是隐含地调用每个子类构造方法的第一条语句,都是隐含地调用每个子类构造方法的第一条语句,都是隐含地调用supersuper()(),如果父类没有这种形式的构造函数,那么在编译的时候就,如果父类没有这种形式的构造函数,那么在编译的时候就,如果父类没有这种形式的构造函数,那么在编译的时候就,如果父类没有这种形式的构造函数,那么在编译的时候就会报错。会报错。会报错。会报错。l l 用来调用父类的构造方法,如:用来调用父类的构造方法,如:super(super(););6.4.2 继承性6.4 6.4 面向对象特性面向对象特性面向对象特性面向对象特性例:成员变量的

50、隐藏和方法的重写,以及例:成员变量的隐藏和方法的重写,以及例:成员变量的隐藏和方法的重写,以及例:成员变量的隐藏和方法的重写,以及supersuper的使用的使用的使用的使用class superClassclass superClass int x;int x;superClass()superClass()x=3;x=3;System.out.println(in superClass:x=+x);System.out.println(in superClass:x=+x);void doSomething()void doSomething()System.out.println(in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com