3java面向对象

上传人:沈*** 文档编号:222749089 上传时间:2023-07-12 格式:PPT 页数:94 大小:271.50KB
收藏 版权申诉 举报 下载
3java面向对象_第1页
第1页 / 共94页
3java面向对象_第2页
第2页 / 共94页
3java面向对象_第3页
第3页 / 共94页
资源描述:

《3java面向对象》由会员分享,可在线阅读,更多相关《3java面向对象(94页珍藏版)》请在装配图网上搜索。

1、Java面向对象特性面向对象特性JAVA语言概述语言概述理解面向对象的基本概念、面向对象的程序设计方法掌握Java的面向对象特性用面向对象技术写Java程序学习目标学习目标2JAVA语言概述语言概述理解方法重载和方法重写类变量和类方法的使用接口的使用难点和重点难点和重点3面向对象技术基础面向对象技术基础什么是面向对象什么是面向对象l80年代初的定义:年代初的定义:面向对象是一种新兴的程序设计方法面向对象是一种新兴的程序设计方法,或者是一或者是一种新的程序设计规范种新的程序设计规范(paradigm),(paradigm),其基本思想是使用其基本思想是使用对象、类、继承、封装、消息等基本概念来进

2、行程对象、类、继承、封装、消息等基本概念来进行程序设计。序设计。l其应用领域不仅仅是软件,还有计算机体系结构和其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。人工智能等。4面向对象技术基础面向对象技术基础基本思想基本思想l从现实世界中客观存在的事物(即对象)出从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。能运用人类的自然思维方式。l软件开发是一种逻辑思维活动,其方法不应软件开发是一种逻辑思维活动,其方法不应该是一种超越人类日常的思维方式。该是一种超越人类日常的思维方式。5面向对象技术基础面向对

3、象技术基础对象的基本概念对象的基本概念l客观世界的组成:客观世界的组成:-对象对象 -对象之间的关系对象之间的关系l对象:对象是系统中需要研究的任何事物对象:对象是系统中需要研究的任何事物,它它不仅能表示具体的事物不仅能表示具体的事物,还能表示抽象的规则、还能表示抽象的规则、计划或事件。它是构成系统的一个基本单位。计划或事件。它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作一个对象由一组属性和对这组属性进行操作的一组服务组成。的一组服务组成。6面向对象技术基础面向对象技术基础类的基本概念类的基本概念l把众多的事物归纳、划分成一些类是人类在把众多的事物归纳、划分成一些类是人类在

4、认识客观世界时经常采用的思维方法。分类认识客观世界时经常采用的思维方法。分类的原则是抽象。的原则是抽象。l类是具有相同属性和服务的一组对象的集合,类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。描述,其内部包括属性和服务两个主要部分。7面向面向对象技象技术基基础class Car int color_number;int door_number;int speed;void brake()void speedUp();void slowDown()计算机中的类 现实生活中的对象8面向对象

5、技术基础面向对象技术基础类的基本概念类的基本概念l在面向对象的编程语言中,类是一个独在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。括属性说明和服务说明两个主要部分。l类与对象的关系类与对象的关系:模具模具铸件铸件 类类 实例化实例化对象对象9面向对象技术基础面向对象技术基础封装封装l封装性就是把对象的属性和服务结合成一个独立封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:两个含义:把对象的全部属性和全部服务结合在一

6、起,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。形成一个不可分割的独立单位(即对象)。信息隐蔽,即尽可能隐蔽对象的内部细节,信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界对外形成一个边界或者说形成一道屏障或者说形成一道屏障,只保,只保留有限的对外接口使之与外部发生联系。留有限的对外接口使之与外部发生联系。10面向对象技术基础面向对象技术基础封装封装l封装的原则在软件上的反映是:要求使对象封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它(属性),从而有效的避

7、免了外部错误对它的的“交叉感染交叉感染”,使软件错误能够局部化,使软件错误能够局部化,大大减少查错和排错的难度。大大减少查错和排错的难度。l可见性:对象的属性和服务允许对象外部存可见性:对象的属性和服务允许对象外部存取和引用的程序。取和引用的程序。11面向对象技术基础面向对象技术基础继承继承l特殊类的对象拥有其一般类的全部属性与服务,称特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。作特殊类对一般类的继承。例如,轮船、客轮;人、学生。例如,轮船、客轮;人、学生。l多继承:一个类可以是多个一般类的特殊类,它从多继承:一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与

8、服务。多个一般类中继承了属性与服务。例如,客轮是轮船和客运工具的特殊类。例如,客轮是轮船和客运工具的特殊类。l在在javajava语言中,通常我们称一般类为父类语言中,通常我们称一般类为父类(superclasssuperclass,超类),特殊类为子类超类),特殊类为子类(subclass)(subclass)。12面向对象技术基础面向对象技术基础消息消息l消息就是向对象发出的服务请求,它应该包含下述消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息信息:提供服务的对象标识、服务标识、输入信息和回答信息。和回答信息。System.out.println(

9、“helloSystem.out.println(“hello”);”);point.drawpoint.draw();();l服务通常被称为方法或函数。服务通常被称为方法或函数。13面向对象技术基础面向对象技术基础多态性多态性l对象的多态性是指在一般类中定义的属性或服务被对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。出不同的行为。l这使得同一个属性或服务在一般类及其各个特殊类这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:中具有不同的语义。例如:几何图形几何图形 的的 绘图

10、绘图 方方法,法,椭圆椭圆 和和 多边形多边形 都是都是 几何图几何图 的子类,其的子类,其 绘绘图图 方法功能不同。方法功能不同。14面向对象技术基础面向对象技术基础主动对象主动对象l主动对象是一组属性和一组服务的封装体,其中至主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作少有一个服务不需要接收消息就能主动执行(称作主动服务)。主动服务)。lJavaJava中拥有中拥有mainmain方法的对象就是主动对象。方法的对象就是主动对象。15面向面向对象与象与过程化程序程化程序设计v过程化程序设计 -逐步求精的处理过程;(自顶向下的方法)-编写求解简单任务

11、的过程,并将它们组装成更加复杂的过程;(自底向上的方法)v面向对象 -先从项目中分离出类 -确定类中的成员及方法16面向面向对象与象与过程化程序程化程序设计v对于规模较小的问题,使用过程化程序设计比较合适,但对于规模较小的问题,使用过程化程序设计比较合适,但对于大规模问题,使用面向对象有以下好处:对于大规模问题,使用面向对象有以下好处:-类提供了一种便于将众多的方法聚集在一起的机制;如类提供了一种便于将众多的方法聚集在一起的机制;如20002000个过程,可能需要个过程,可能需要100100个类,平均每个类个类,平均每个类2020个方法;个方法;-类的封装机制有助于对其他的类方法隐藏数据操作;

12、类的封装机制有助于对其他的类方法隐藏数据操作;数据数据过程程过程程过程程过程程过程程对象数据象数据方法方法方法方法对象数据象数据方法方法方法方法17Java语言的面向对象技术特性语言的面向对象技术特性类类l包括类声明和类体包括类声明和类体l类声明:类声明:publicabstract|final class className extends superclassName implements interfaceNameList18Java语言的面向对象技术特性语言的面向对象技术特性类类l类体定义如下:类体定义如下:class className public|protected|privat

13、e static final transient volatile typevariableName;/成员变量成员变量public|protected|private staticfinal|abstract native synchronizedreturnType methodName(paramList)throws exceptionListstatements /成员方法成员方法19Java语言的面向对象技术特性语言的面向对象技术特性类类l成员变量成员变量 public|protected|private static final transient volatile typeva

14、riableName;static:static:静态变量(类变量);相对于实例变量静态变量(类变量);相对于实例变量final:final:常量常量transient:transient:暂时性变量,用于对象存档暂时性变量,用于对象存档volatile:volatile:贡献变量,用于并发线程的共享贡献变量,用于并发线程的共享20Java语言的面向对象技术特性语言的面向对象技术特性类类l成员方法成员方法方法的实现包括两部分内容:方法声明和方法体。方法的实现包括两部分内容:方法声明和方法体。public|protected|private staticfinal|abstract native

15、 synchronizedreturnType methodName(paramList)throws exceptionList/方法声明statements/方法体l方法声明中的限定词的含义:方法声明中的限定词的含义:static:static:类方法,可通过类名直接调用类方法,可通过类名直接调用abstract:abstract:抽象方法,没有方法体抽象方法,没有方法体final:final:方法不能被重写方法不能被重写native:native:集成其它语言的代码集成其它语言的代码synchronized:synchronized:控制多个并发线程的访问控制多个并发线程的访问21Jav

16、a语言的面向对象技术特性语言的面向对象技术特性类类l参数的值参传递参数的值参传递 import java.io.*;public class PassTest float ptValue;public static void main(String args)int val;PassTest pt=new PassTest();val=11;System.out.println(“Original Int Value is:”+val);pt.changeInt(val);/值参数 System.out.println(Int Value after Change is:+val);22Jav

17、a语言的面向对象技术特性语言的面向对象技术特性类类l参数的值参传递参数的值参传递 pt.ptValue=101f;System.out.println(“Original ptValue is:”+pt.ptValue);pt.changeObjValue(pt);/引用类型的参数 System.out.println(ptValue after Change is:+pt.ptValue);public void changeInt(int value)value=55;/在方法内部对值参数进行了修改public void changeObjValue(PassTest ref)ref.pt

18、Value=99f;/在方法内部对引用参数进行了修改23Java语言的面向对象技术特性语言的面向对象技术特性类类l参数的值参传递参数的值参传递 c:java PassTestOriginal Int Value is:11Int Value after Change is:11Original ptValue is:101.0ptValue after Change is:99.0 24Java语言的面向对象技术特性语言的面向对象技术特性类类l成员方法(方法体)成员方法(方法体)-方法体是对方法的实现,它包括局部变量的声明以方法体是对方法的实现,它包括局部变量的声明以及所有合法的及所有合法的J

19、avaJava指令。指令。-方法体中声明的局部变量的作用域在该方法内部。方法体中声明的局部变量的作用域在该方法内部。-若局部变量与类的成员变量同名,则类的成员变量若局部变量与类的成员变量同名,则类的成员变量被隐藏。被隐藏。25Java语言的面向对象技术特性语言的面向对象技术特性类类 import java.io.*;class Variableint x=0,y=0,z=0;/类的成员变量void init(int x,int y)this.x=x;this.y=y;int z=5;/局部变量System.out.println(*in init*);System.out.println(x=

20、+x+y=+y+z=+z);26Java语言的面向对象技术特性语言的面向对象技术特性类类 public class VariableTestpublic static void main(String args)Variable v=new Variable();System.out.println(*before init*);System.out.println(x=+v.x+y=+v.y+z=+v.z);v.init(20,30);System.out.println(*after init*);System.out.println(x=+v.x+y=+v.y+z=+v.z);27Jav

21、a语言的面向对象技术特性语言的面向对象技术特性类类c:java VariableTest*before init*x=0 y=0 z=0*in init*x=20 y=30 z=5*after init*x=20 y=30 z=0 28Java语言的面向对象技术特性语言的面向对象技术特性类类v成员方法成员方法lthis-this-用在一个方法中引用当前对象,它用在一个方法中引用当前对象,它的值是调用该方法的对象。的值是调用该方法的对象。l返回值须与返回类型一致,或者完全相同,返回值须与返回类型一致,或者完全相同,或是其子类。或是其子类。l当返回类型是接口时,返回值必须实现该接当返回类型是接口时

22、,返回值必须实现该接口。口。29Java语言的面向对象技术特性语言的面向对象技术特性类类v方法重载方法重载l方法重载是指多个方法享有相同的名字方法重载是指多个方法享有相同的名字l区别在于区别在于:或者是参数的个数不同,或者是参或者是参数的个数不同,或者是参数类型不同。数类型不同。l参数类型的区分度一定要足够,例如不能是参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如同一简单类型的参数,如int与与long。l返回类型不能用来区分重载的方法。返回类型不能用来区分重载的方法。30Java语言的面向对象技术特性语言的面向对象技术特性类类v方法重载方法重载 import java.io.*

23、;class MethodOverloading void receive(int i)System.out.println(“Receive one int data”);System.out.println(“i=”+i);void receive(int x,int y)System.out.println(“Receive two int datas”);System.out.println(x=+x+y=+y);31Java语言的面向对象技术特性语言的面向对象技术特性类类v方法重载方法重载public class MethodOverloadingTestpublic static

24、void main(String args)MethodOverloading mo=new MethodOverloading();mo.receive(1);mo.receive(2,3);32Java语言的面向对象技术特性语言的面向对象技术特性类类v方法重载方法重载c:java MethodOverloadingTestReceive one int datai=1Receive two int datasx=2 y=3 33Java语言的面向对象技术特性语言的面向对象技术特性类类v构造方法构造方法 重载经常用于构造方法。重载经常用于构造方法。构造方法具有和类名相同的名称,而且不返回构造

25、方法具有和类名相同的名称,而且不返回任何数据类型。任何数据类型。Java Java 中的每个类都有构造方法,用来初始化中的每个类都有构造方法,用来初始化该类的一个对象。该类的一个对象。构造方法只能由构造方法只能由newnew运算符调用运算符调用34Java语言的面向对象技术特性语言的面向对象技术特性类类v构造方法构造方法 class Pointint x,y;Point()x=0;y=0;Point(int x,int y)this.x=x;this.y=y;35Java语言的面向对象技术特性语言的面向对象技术特性对象对象v类实例化可生成对象类实例化可生成对象v对象通过消息传递来进行交互对象通

26、过消息传递来进行交互v消息传递即激活指定的某个对象的方法以改变消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。表示为调用该其状态或让它产生一定的行为。表示为调用该对象的某个方法。对象的某个方法。public class HelloWorldApp public static void main(String args)System.out.println(“hello”);36Java语言的面向对象技术特性语言的面向对象技术特性对象对象v对象的生命周期对象的生命周期l生成生成l使用使用l清除清除37Java语言的面向对象技术特性语言的面向对象技术特性对象对象v对象的生成对象

27、的生成l对象的生成包括声明、实例化和初始化。对象的生成包括声明、实例化和初始化。l格式为:格式为:type type objectNameobjectName=new=new type(paramlisttype(paramlist););1.1.声明:声明:type type objectNameobjectName 声明并不为对象分配内存空间,而只是分声明并不为对象分配内存空间,而只是分配一个引用空间;配一个引用空间;2.2.实例化:运算符实例化:运算符newnew为对象分配内存空间,它调为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同用对象的构造方法,返回引用;一个类的不

28、同对象分别占据不同的内存空间;对象分别占据不同的内存空间;3.生成:执行构造方法,进行初始化;根据参数生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。不同调用相应的构造方法。38Java语言的面向对象技术特性语言的面向对象技术特性对象对象v对象的生成对象的生成l对象的引用类似于指针,是对象的引用类似于指针,是32位的地址空位的地址空间,它的值指向一个中间的数据结构,它间,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安

29、全内存地址是不可操作的,这就保证了安全性。性。39Java语言的面向对象技术特性语言的面向对象技术特性对象对象v对象的使用对象的使用l通过运算符通过运算符“.”可以实现对变量的访问和方可以实现对变量的访问和方法的调用。法的调用。l变量和方法可以通过设定访问权限来限制变量和方法可以通过设定访问权限来限制其它对象对它的访问。其它对象对它的访问。40Java语言的面向对象技术特性语言的面向对象技术特性对象对象v调用对象的变量调用对象的变量l格式:格式:objectReference.variablelobjectReference是一个已生成的对象,也是一个已生成的对象,也可以是能生成对象的表达式可

30、以是能生成对象的表达式l例:例:p.x=10;tx=new Point().x;41Java语言的面向对象技术特性语言的面向对象技术特性对象对象v调用对象的方法调用对象的方法l格式:格式:objectReference.methodName(paramlist);l例如:例如:p.move(30,20);new Point().move(30,20);l使用方法的返回值使用方法的返回值 if(p.equal(20,30)/statements when equal else /statements when unequal 42Java语言的面向对象技术特性语言的面向对象技术特性对象对象v对象

31、的清除对象的清除l当不存在对一个对象的引用时,该对象成为一个当不存在对一个对象的引用时,该对象成为一个无用对象。无用对象。lJavaJava的垃圾收集器自动扫描对象的动态内存区,的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。把没有引用的对象作为垃圾收集起来并释放。lSystem.gcSystem.gc();();当系统内存用尽或调用当系统内存用尽或调用System.gcSystem.gc()()要求垃要求垃圾回收时,垃圾回收线程与系统同步运行。圾回收时,垃圾回收线程与系统同步运行。43Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象

32、特性的面向对象特性v封装性封装性v继承性继承性v多态性多态性44Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v封装性封装性l类定义类定义 class className public|protected|private static final transient volatile typevariableName;/成员变量public|protected|private staticfinal|abstract native synchronizedreturnType methodName(paramList)throws except

33、ionListstatements/成员方法45Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v封装性封装性lJava类中的修饰词类中的修饰词 1)private 类中限定为类中限定为privateprivate的成员,只能被这个类本的成员,只能被这个类本身访问。身访问。如果一个类的构造方法声明为如果一个类的构造方法声明为private,private,则其则其它类不能生成该类的一个实例。它类不能生成该类的一个实例。2)default类中不加任何访问权限限定的成员属于缺省类中不加任何访问权限限定的成员属于缺省的(的(defaultdefault

34、)访问状态,可以被这个类本身和同)访问状态,可以被这个类本身和同一个包中的类所访问。一个包中的类所访问。46Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v封装性封装性lJava类中的修饰词类中的修饰词3 3)protectedprotected类中限定为类中限定为protectedprotected的成员,可以被这个类的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。的子类)和同一个包中的所有其他的类访问。4 4)publicpublic类中限定为类

35、中限定为publicpublic的成员,可以被所有的类的成员,可以被所有的类访问。访问。47Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v封装性封装性lJava类中的修饰词类中的修饰词48Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v继承性继承性l通过继承实现代码复用通过继承实现代码复用l根类根类:java.lang.Objectl父类包括直接或者间接被继承的类父类包括直接或者间接被继承的类lJava不支持多重继承不支持多重继承l子类不能继承父类中访问权限为子类不能继承父类中访问权限为pri

36、vate的的成员变量和方法。成员变量和方法。l子类可以重写父类的方法,其命名与父类子类可以重写父类的方法,其命名与父类方法同名方法同名49Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v继承性继承性l创建子类创建子类 -格式格式 class SubClass extends SuperClass 50Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v继承性继承性l成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写 -子类通过隐藏父类的成员变量和重写父类的方法,子类通过隐藏父类的成员变量和重写父类

37、的方法,可以把父类的状态和行为改变为自身的状态和行为。可以把父类的状态和行为改变为自身的状态和行为。class class SuperClassSuperClass intint x;x;void void setXsetX()x=0;()x=0;class class SubClassSubClass extends extends SuperClassSuperClass intint x;x;/隐藏了父类的变量隐藏了父类的变量x xvoid void setXsetX()/()/重写了父类的方法重写了父类的方法 setXsetX()()x=5;.x=5;.51Java语言的面向对象技术特

38、性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v继承性继承性l重写重写:子类中重写的方法和父类中被重写的方法子类中重写的方法和父类中被重写的方法要具有相同的名字要具有相同的名字,相同的参数表和相同的返回相同的参数表和相同的返回类型类型52Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vsuper java java中通过中通过supersuper来实现对父类成员的访问,来实现对父类成员的访问,supersuper用来引用当前对象的父类。用来引用当前对象的父类。Super Super 的使用有三种的使用有三种情况:情况:1

39、1)访问父类被隐藏的成员变量,如:)访问父类被隐藏的成员变量,如:super.variable;super.variable;2 2)调用父类中被重写的方法,如:)调用父类中被重写的方法,如:super.Method(paramlist);super.Method(paramlist);3 3)调用父类的构造函数,如:)调用父类的构造函数,如:super(paramlist);super(paramlist);53Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vsuper import java.io.*;class SuperClassint

40、 x;SuperClass()x=3;System.out.println(in SuperClass:x=+x);void doSomething()System.out.println(in SuperClass.doSomething();54Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vsuperclass SubClass extends SuperClass int x;SubClass()super();/调用父类的构造方法调用父类的构造方法x=5;/super()要放在方法中的第一句要放在方法中的第一句System.out.p

41、rintln(in SubClass:x=+x);void doSomething()super.doSomething();/调用父类的方法调用父类的方法System.out.println(in SubClass.doSomething();System.out.println(super.x=+super.x+sub.x=+x);55Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vsuperpublic class Inheritance public static void main(String args)SubClass subC=

42、new SubClass();subC.doSomething();56Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vSuperl运行结果运行结果 in SuperClass:x=3in SubClass:x=5in SuperClass.doSomething()in SubClass.doSomething()super.x=3 sub.x=557Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l静态多态性静态多态性(编译时多态编译时多态)由重载的方法实现由重载的方法实现l 运

43、行时多态运行时多态由方法重写实现由方法重写实现 调用规则调用规则:根据实例的类型根据实例的类型58Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l重写方法的调用规则重写方法的调用规则 import java.io.*;class Avoid callme()System.out.println(Inside As callme()method“);class B extends Avoid callme()System.out.println(Inside Bs callme()Method);59Java语言的面向对象技术特性语

44、言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l重写方法的调用规则重写方法的调用规则public class Dispatchpublic static void main(String args)A a=new B();a.callme();60Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l重写方法的调用规则重写方法的调用规则 -运行结果运行结果c:java DispatchInside Bs callme()method 61Java语言的面向对象技术特性语言的面向对象技术特性JavaJava

45、的面向对象特性的面向对象特性v多态性多态性l方法重写时应遵循的原则:方法重写时应遵循的原则:1 1)改写后的方法不能比被重写的方法有更严)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。格的访问权限(可以相同)。2 2)改写后的方法不能比重写的方法产生更多)改写后的方法不能比重写的方法产生更多的例外。的例外。62Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l方法重写时应遵循的原则:方法重写时应遵循的原则:class Parentclass Parent public void function()public vo

46、id function()class Child extends Parent class Child extends Parent private void function()private void function()63Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l方法重写时应遵循的原则:方法重写时应遵循的原则:public class public class OverriddenTestOverriddenTest public static void public static void main(Stringm

47、ain(String argsargs)Parent p1=new Parent();Parent p1=new Parent();Parent p2=new Child();Parent p2=new Child();p1.function();p1.function();p2.function();p2.function();64Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v多态性多态性l对象状态的确定对象状态的确定(instance of)(instance of)-Manager -Manager和和ContractorContrac

48、tor都是都是EmployeeEmployee的子类的子类 -public void-public void method(Employeemethod(Employee e)e)if(eif(e instance of Manager)instance of Manager)/do something as a Manager /do something as a Manager else else if(eif(e instance of Contractor)instance of Contractor)/do something as a Contractor /do somethin

49、g as a Contractor 65Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vfinal final 关键字关键字final final 关键字可以修饰类、类的成员变量和成员方法,关键字可以修饰类、类的成员变量和成员方法,但但final final 的作用不同。的作用不同。1 1)final final 修饰成员变量:修饰成员变量:finalfinal修饰变量修饰变量,则成为常量,例如则成为常量,例如final type variableName;final type variableName;修饰成员变量时,定义时同时给出初始值,而

50、修饰局修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。部变量时不做要求。66Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vfinal 关键字关键字2 2)final final 修饰成员方法:修饰成员方法:finalfinal修饰方法,则该方法不能被子类重写修饰方法,则该方法不能被子类重写final returnType methodName(paramList)final returnType methodName(paramList)3 3)final final 类:类:finalfinal修饰类,则类不能被继承修饰类,

51、则类不能被继承final class finalClassNamefinal class finalClassName 67Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v实例成员和类成员实例成员和类成员l用用static static 关键字可以声明类变量和类方法,其关键字可以声明类变量和类方法,其格式如下:格式如下:static type static type classVarclassVar;static static returnTypereturnType classMethod(paramlistclassMethod(param

52、list)l如果在声明时不用如果在声明时不用static static 关键字修饰,则声明关键字修饰,则声明为实例变量和实例方法。为实例变量和实例方法。68Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v实例成员和类成员实例成员和类成员l每个对象的实例变量都分配内存每个对象的实例变量都分配内存l通过该对象来访问这些实例变量,不同的实例通过该对象来访问这些实例变量,不同的实例变量是不同的。变量是不同的。l类变量仅在生成第一个对象时分配内存,所有类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量实例对象共享同一个类变量l类变量可通过类

53、名直接访问,无需先生成一个类变量可通过类名直接访问,无需先生成一个实例对象实例对象l也可以通过实例对象访问类变量。也可以通过实例对象访问类变量。69Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v实例方法和类方法实例方法和类方法l实例方法可以对当前对象的实例变量进行操作,实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作。也可以对类变量进行操作。l类方法不能访问实例变量,只能访问类变量。类方法不能访问实例变量,只能访问类变量。l类方法可以由类名直接调用,也可由实例对象类方法可以由类名直接调用,也可由实例对象进行调用。进行调用。l类

54、方法中不能使用类方法中不能使用thisthis或或supersuper关键字。关键字。70Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性class Member static int classVar;int instanceVar;static void setClassVar(int i)classVar=i;/instanceVar=i;/类方法不能访问实例变量static int getClassVar()return classVar;void setInstanceVar(int i)classVar=i;instanceVar=i

55、;int getInstanceVar()return instanceVar;71Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性public class MemberTestpublic static void main(String args)Member m1=new member();Member m2=new member();m1.setClassVar(1);m2.setClassVar(2);System.out.println(m1.classVar=“+m1.getClassVar()+“m2.ClassVar=+m2.ge

56、tClassVar();m1.setInstanceVar(11);m2.setInstanceVar(22);System.out.println(m1.InstanceVar=“+m1.getInstanceVar()+m2.InstanceVar=“+m2.getInstanceVar();72Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性 c:java MemberTestm1.classVar=2 m2.classVar=2m1.InstanceVar=11 m2.InstanceVar=22 73Java语言的面向对象技术特性语言的

57、面向对象技术特性JavaJava的面向对象特性的面向对象特性v类类java.lang.Objectjava.lang.Objectl类类java.lang.Objectjava.lang.Object处于处于javajava开发环境的类层次的根部,开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。其它所有的类都是直接或间接地继承了此类。l该类定义了一些最基本的状态和行为。该类定义了一些最基本的状态和行为。-equals()-equals():比较两个对象:比较两个对象(引用引用)是否相同。是否相同。-getClassgetClass()():返回对象运行时所对应的类的表示,:返回

58、对象运行时所对应的类的表示,从而可得到相应的信息。从而可得到相应的信息。-toStringtoString()():用来返回对象的字符串表示。:用来返回对象的字符串表示。-finalize()-finalize():用于在垃圾收集前清除对象。:用于在垃圾收集前清除对象。-notify(),notifyAll(),waitnotify(),notifyAll(),wait()():用于多线程处理:用于多线程处理中的同步。中的同步。74Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v抽象类抽象类l用用abstract abstract 关键字来修饰

59、一个类或方法关键字来修饰一个类或方法abstract class abstract class abstractClassabstractClass abstract abstract returnTypereturnType abstractMethod(paramlistabstractMethod(paramlist)l抽象类必须被继承,抽象方法必须被重写抽象类必须被继承,抽象方法必须被重写l抽象方法只需声明,无需实现;抽象类不能被实例化抽象方法只需声明,无需实现;抽象类不能被实例化l抽象类不一定要包含抽象方法抽象类不一定要包含抽象方法l若类中包含了抽象方法,则该类必须被定义为抽象类若类

60、中包含了抽象方法,则该类必须被定义为抽象类75Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v接口接口接口是抽象类的一种,只包含常量和方法的定义,而接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。没有变量和方法的实现,且其方法都是抽象方法。接口的作用接口的作用l通过接口实现不相关类的相同行为通过接口实现不相关类的相同行为,而无需考虑这些类而无需考虑这些类之间的关系。之间的关系。l通过接口指明多个类需要实现的方法。通过接口指明多个类需要实现的方法。l通过接口了解对象的交互界面通过接口了解对象的交互界面,而

61、无需了解对象所对应而无需了解对象所对应的类。的类。76Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v接口接口 接口的定义接口的定义l接口的定义包括接口声明和接口体接口的定义包括接口声明和接口体l完整的接口声明:完整的接口声明:public interface public interface interfaceNameextendsinterfaceNameextends listOfSuperInterfacelistOfSuperInterface l接口体包括常量定义和方法定义接口体包括常量定义和方法定义-常量定义格式为:常量定义格式为

62、:type NAME=value;type NAME=value;该常量被实现该该常量被实现该接口的多个类共享接口的多个类共享;缺省的具有缺省的具有public,final,staticpublic,final,static的属性。的属性。-方法体定义格式为:方法体定义格式为:(缺省的具有缺省的具有 publicpublic和和abstractabstract属性属性)returnTypereturnType methodName(paramlistmethodName(paramlist);77Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v

63、接口接口 接口的定义接口的定义l例例:interface Collectioninterface Collectionintint MAX_NUM=100;MAX_NUM=100;void void add(Objectadd(Object objobj););void void delete(Objectdelete(Object objobj););Object Object find(Objectfind(Object objobj););intint currentCountcurrentCount();();78Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面

64、向对象特性的面向对象特性v接口接口 接口的实现接口的实现l在类的声明中用在类的声明中用implementsimplements子句来表示一个类使用某个子句来表示一个类使用某个接口接口l一个类可以实现多个接口一个类可以实现多个接口,在在implementsimplements子句中用逗号子句中用逗号分开分开l在类体中可以使用接口中定义的常量,必须实现接口中在类体中可以使用接口中定义的常量,必须实现接口中定义的所有方法。定义的所有方法。79Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v接口接口 接口的实现接口的实现l例例:class class

65、FIFOQueneFIFOQuene implements Collection implements Collectionvoid void add(Objectadd(Object objobj)void void delete(Objectdelete(Object objobj)Object Object find(Objectfind(Object objobj)intint currentCountcurrentCount 80Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v接口接口 接口类型的使用接口类型的使用l接口作为一种引用类

66、型来使用接口作为一种引用类型来使用l任何实现该接口的类的实例都可以存储在该接口类型的任何实现该接口的类的实例都可以存储在该接口类型的变量中变量中l通过这些变量可以访问类所实现的接口中的方法。通过这些变量可以访问类所实现的接口中的方法。81Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性v接口接口 接口类型的使用接口类型的使用l例例:class class InterfaceTypeInterfaceType public static void public static void main(Stringmain(String argsargs)Collection c=new Collection c=new FIFOQueneFIFOQuene();();c.add(objc.add(obj););82Java语言的面向对象技术特性语言的面向对象技术特性JavaJava的面向对象特性的面向对象特性vInner Classl内部类内部类:在一个类的内部嵌套定义的类在一个类的内部嵌套定义的类 (1)是其它类的成员是其它类的成员 (2)在一

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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