Java面向对象编程基础IT168文库.ppt

上传人:牧羊曲112 文档编号:6510326 上传时间:2023-11-07 格式:PPT 页数:89 大小:481KB
返回 下载 相关 举报
Java面向对象编程基础IT168文库.ppt_第1页
第1页 / 共89页
Java面向对象编程基础IT168文库.ppt_第2页
第2页 / 共89页
Java面向对象编程基础IT168文库.ppt_第3页
第3页 / 共89页
Java面向对象编程基础IT168文库.ppt_第4页
第4页 / 共89页
Java面向对象编程基础IT168文库.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《Java面向对象编程基础IT168文库.ppt》由会员分享,可在线阅读,更多相关《Java面向对象编程基础IT168文库.ppt(89页珍藏版)》请在三一办公上搜索。

1、第3章 Java面向对象编程基础,3.1面向对象软件开发概述3.2 Java的类3.3 Java的非访问控制符3.4 Java的访问控制符3.5 定义和使用Java的方法3.6 面向对象分析实例(补充),学习要点:,1.理解面向对象程序设计的基本概念2.理解Java包中类的基本概念,掌握定义Java类和创建对象的方法3.掌握构造函数:构造函数的特点、构造函数的定义4.掌握Java的访问控制符:public、private、protected、private protected5.掌握Java的非访问控制符:static、abstract、final6.理解方法的形式参数与实际参数、方法的返回值

2、、方法的调用过程,面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。,3.1 面向对象软件开发概述,图2.1 对象、实体与类,3.1.1 程序设计方法的发展,3.1.2 面向对象的几个基本概念,类(Class)是定义了对象特征以及对象外观和行为的模板,是同种对象的集合与抽象。类是一种抽象数据类型

3、。对象(Object)是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现,是具有唯一对象名和固定对外接口的一组属性和操作的集合,是类的一个实例,具有所在类所定义的全部属性和方法。属性(Property)是对象的特征,包括状态和行为。,属性,动态属性也叫行为,在计算机内用方法表示,静态属性也叫状态,在计算机内用变量表示,对象的关系 包含当对象A是对象B的属性时,称对象B包含对象A;如:学生和班级,CPU与计算机 继承当对象A是对象B的特例时,称对象A继承了对象B 如:北京大学和大学,液晶显示器和显示器。关联当对象A的引用是对象B的属性时,称对象A和对象 B之间是关联关系。如计算机与制造商,

4、学生和班主任方法(Method)与对象相联系的由程序执行的一个处理过程,类似于面向过程中的函数。事件(Event)由对象识别的一个动作。面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类和对象是面向对象程序设计技术的核心。,继承性(inheritance),自动地共享具有层次关系的类(子类)和对象中的方法和数据的机制。当类Y继承类X时,就表明类Y是类X的子类,而类X是类Y的超/父类。类Y由两部分组成:继承部分和增加部分。增加部分是专为Y编写的新代码;继承部分可以是简单的等同,也可以更为丰富:如对性质重命名、重实现、复制、置空等。,继承方式:简单继承(single inheritanc

5、e):一个类至多只能继承一个 类(树结构)。多重继承(multiple inheritance):一个类直接继承多个超 类(网状结构)。(),例:一个图形系统(),Figure,Line,Ellipse,Polygon,Close Figure,Open Figure,Pentagon,Triangle,Rectangle,Circle,Arc,(象素宽度,颜色,平移,旋转),(填充,边界,周长,面积),(长度),3.1.3 面向对象的软件开发过程,面向对象的软件开发过程可以大体划分为三个阶段:面向对象的分析(object oriented analysis,OOA)面向对象的设计(objec

6、t oriented design,OOD)面向对象的实现(object oriented programming,OOP)。,(1)面向对象的分析(OOA object oriented analysis),主要作用:明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型,即OOA模型。分析阶段的工作应该由用户和开发人员共同协作完成。面向对象的分析首先应该明确用户的需求,然后再将这些需求以标准化模型的形式规范地表述出来,即将用户和开发人员头脑中形成的需求以准确的文字、图表等形式表述出来,形成双方都认可的文件。,使用OOA的原因如下:(1)它使我们能在人类概

7、括客观事物的三个基本方法(对象及属性、一般特殊结构和部分整体结构)的框架上进行定义和交流。(2)它首先着眼于问题空间的理解。(3)它将属性及专用于那些属性的方法视为一个固有的整体。(4)使用自包含分块(对象之间依赖性最小)进行分析和说明。(5)它提供一个支持分析和设计一致的强有力的表示工具。(6)它能适应系列变化的系统和对当前实际运行系统的调整。,常使用的OO(描述)方法有多种:,Booch Booth 方法(86年)Coad&yourdon 方法(90年)James Rumbaugh(OMT)方法(91年)Berard 方法Fire Smith 方法Jacobson(OOSE)方法Marti

8、n-Odeu 方法Seidewitz-Stark 方法Shlaer-Mellor 方法Wirfs-Brook 方法UML(Unified Modeling Language)方法,Coad&Yourdon 的OOA模型的5个层次对象类层:找到要开发的应用软件所对应的各个现实世界的实体,并从中抽象出类和对象。静态属性层:为对象类层中抽取出来的各个类和对象设计静态属性和它们之间的约束关系。服务层:定义对象和类的动态属性以及对象之间的消息通信。结构层:定义系统中所有对象和类之间的层次结构关系。主题层:将系统定义为若干主题(即子系统),把有关对象划归不同的主题。,从面向对象的分析到面向对象的设计,OO

9、A的各层模型化了“问题空间”,而作为OOA各层扩充的OOD,则模型化一个特定的“实现空间”。这种扩充主要是从增加属性和方法开始的。OOA是独立于程序设计语言的,初步的OOD在很大程度上依然独立于程序设计语言,而详细OOD是依赖于语言的,并可有效地应用过程式、函数式和面向对象的程序设计语言加以实现。语言的选择对OOD的实施有重要的影响,但不会影响OOD的有效性。,(2)面向对象的设计(OOD object oriented design),概要设计构成最初的OOD模型 OOA模型界面管理:负责整个系统的人机交互界面的设计任务管理:负责处理并行操作之类的系统资源管理功能数据管理:负责设计系统与数据

10、库的接口详细设计对OOD模型进行细化细化分析:是否有可以直接引用的已有类或部件细化设计:设计类,包括类的属性和类之间的相互关系细化验证:验证各对象类公式间是否相容和一致、类成 员的访问权限设置是否合理、对象类的功能 是否符合用户要求等。,(3)面向对象的实现(OOP object oriented programming),选择一种合适的面向对象的编程语言用选定的语言编码实现对软件系统中各对象类的详尽描述将编写好的各个类代码模块根据类的相互关系集成起来利用开发人员提供的测试样例和用户提供的测试样例分别检验编码完成的各个模块和整个软件系统。,面向对象的软件开发过程小结,分析用户需求,从问题中抽取

11、对象模型;将模型细化,设计类,包括类的属性和类之间的相互关系,同时考察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案。,3.1.4 面向对象程序设计的四个特点,抽象性 指采用数据抽象的方法来构建程序的类、对象和方法,即把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。封装性 指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能与这个类进行交流和交互。,继承性 指一个类可以从其它已有的类中派

12、生,新类保持了父类中的行为和属性,但增加了新的功能。多态性 指一个程序中可以有同名的不同方法共存的情况。可以利用子类对父类方法的覆盖和重载在同一个类中定义多个同名的方法来实现。,3.1.5 面向对象程序设计的三大优点,可重用性 指在一个软件项目中所开发的模块,不仅可以用于本项目,还可以重复地使用在其他项目中。提高了开发效率,缩短了开发周期,降低了开发成本。由于采用了正确、有效的模块,质量得到保证,维护工作量减少。采用可重用模块来构建程序,提高了程序的标准化程度,符合现代大规模软件开发的需求。,可管理性,采用类作为构建系统的部件,使整个项目的组织更加合理、方便;把数据和其上的操作封装在一起,仅本

13、类的方法才可以操纵、改变这些数据,效率提高,开发难度降低;,指应用软件能够很方便地进行修改和扩充,包括软件的内容、形式和工作机制(如把C/S模式改为B/S模式)的修改和扩充。特别适合于使用在快速原型的软件开发方法中。使系统维护(包括延伸开发)变得简单和容易,维护工作量和开销大大降低。对模块化技术的更有效的支持。,可扩展性,3.2 Java的类,3.2.1 Java 类库的概念 语言规则程序的书写规范Java语言 类库已有的有特定功能的Java程序模块 Java的类库大部分是由SUN公司提供的,叫基础类库(JFC)。根据功能不同,Java的类库被划分为若干个不同的包,每个包中都有若干个具有特定功

14、能和相互关系的类和接口。包是一种松散的类的集合。同一个包中的类在缺省情况下可以互相访问,为了便于编程和管理,常把需要在一起工作的类放在一个包里。,3.2.2 Java中常用的包,(1)java.lang 包 这是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如:基本数据类型、基本数学函数、字符串处理、线程、异常处理等,这个包系统自动加载。(2)java.io包 是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及其他Java程序做数据交换所使用的类。(3)java.util包 包含了Java语言中的一些低级的实用工具,如处理时间的Date类、处理

15、变长数组的Vector类,栈Stack类、散列表HashTable类等。,(4)java.awt包 是Java语言用来构建图形用户界面(GUI)的类库。低级绘图操作Graphics类等java.awt 图形控件和布局Container类、Checkbox类、LayoutManager接口等 界面用户控制和事件响应Event类(5)java.applet包 是用来实现在Internet浏览器中运行Java Applet的工具类,其中包含一个非常有用的类java.applet.Applet。(6)java.awt.event包 是对Event类的一个扩充,可以用不同方式来处理不同类型的事件,并使每

16、个图形界面元素本身可以拥有处理它上面事件的能力。,3.2.3 使用系统类库的方式,(1)继承系统类,在用户程序里创建系统类的子类如:public class SjApplet extends Applet(2)创建系统类的对象 如:TextField input=new TextField(6)(3)直接使用系统类 如:System.out.println()注意:使用系统类之前,用户程序需要用import语句引入所用到的系统类或系统类所在的包。如:import java.awt.*;import java.awt.event.*;,3.2.4 创建Java自定义类的方法,定义类就是定义类的属

17、性和服务。类的属性即静态属性,指类内的各项数据;类的服务即成员函数或方法。语法结构:修饰符 class 类名 extends 父类 implements 接口名 类成员变量声明 类方法声明,接口名,父类,修饰符,定义类属性,成员变量,定义类方法,(1)声明类头:关键字class,父类名:跟在extends关键字后,用以说明当前类是已经存在的哪个类的子类。通过定义继承关系,子类可以获得父类的所有属性和方法,并进一步定义它自己的特殊属性.接口名:跟在implements关键字后,用以说明当前类中实现了哪个接口定义的功能和方法。修饰符:说明类的特殊性质,分为访问控制符、抽象说明类和最终类说明符。,(

18、2)声明类体:定义类的具体内容,包括类的属性与方法类的属性:可以是简单变量,也可以是对象、数组等其他复杂数据结构。声明类属性为简单变量的语法:修饰符 变量类型 变量名=变量初值;例:int password;声明类属性为对象的语法:修饰符 类名 对象名=new 类名(实际参数列表);例:PhoneCard myCard=new PhoneCard();修饰符有访问控制符、静态修饰符static、最终修饰符final、易失修饰符volatile和 过渡修饰符transient。,类中的“变量”概念辨析:,(1)成员变量:在类体变量定义处定义的变量,在整个类内都有效;成员变量包括实例变量和类变量,

19、用static定义的变量是类变量,也叫静态变量;所有对象独享实例变量,但共享类变量;实例变量只能通过对象名访问,类变量既可以通过某个对象名也可以通过类名来访问。(2)局部变量:在类的方法中定义的变量,仅在定义它的方法内有效,类的方法:,即成员函数,它规定类属性上的操作,实现类的内部功能的机制,是类与外部交互的窗口。语法结构:修饰符 返回值类型 方法名(参数列表)throws 例外名1,例外名2,.方法体;局部变量声明;语句序列;,类中的“方法”概念辨析:,(1)实例方法:实例方法既可以操作实例变量,也可以操作类变量;实例方法在创建类对象后才分配入口地址;实例方法可以被类创建的任何对象访问,必须

20、通过对象来调用;实例方法可以调用其它方法(包括类方法)。(2)类方法:用static修饰的方法是类方法,也叫静态方法;类方法只能操作类变量;类方法在类被加载到内存后就分配了入口地址;类方法可以被类创建的任何对象调用,也可以通过类名来调用,类方法只能调用该类的类方法。,class PhoneCard/定义一个电话卡类long cardNumber;private int password;double balance;String connectNumber;boolean connected;boolean performConnection(long cn,int pw)/方法1,实现连接

21、if(cn=cardNumber,类的属性,double getBalance()/方法2,返回余额if(connected)return balance;elsereturn-1;void performDial()/方法2,实现拨号if(connected)balance-=0.5;,3.2.5 创建类的实例对象,创建对象的一般格式:类名 新建对象名=new 构造函数();new是为新建对象开辟内存空间的算符。构造函数()用来完成对象的初始化。如:TextField input=new TextField(6);建立一个名为input、长度为6的文本框。PhoneCard myCard=n

22、ew PhoneCard();建立一个名为myCard的电话卡对象。,3.2.6 Java中的构造函数,(1)基本概念构造函数:用来初始化对象(为其所有静态属性赋初值)的一个特殊方法。构造函数名与类名相同 构造函数可以有0个或多个参数特点 构造函数始终和new关键字一起调用 构造函数没有返回值 构造函数一般不能由编程人员显示地直接调用 在创建一个类的新对象时,系统自动调用构造 函数对其进行初始化。,引入构造函数的原因:1)满足面向对象程序设计中对象初始化的需要;2)提高灵活度,使初始化工作除赋值外有更复杂的操作;在不定义构造函数时,系统会自动为该类生成一个默认的构造函数。,(2)构造函数的定义

23、,例如,可以为PhoneCard类定义如下的构造函数,初始化它的几个域。PhoneCard(long cn,int pw,double b,String s)cardNumber=cn;password=pw;balance=b;connectNumber=s;connected=false;可见,构造函数定义了几个形式参数,创建对象的语句在调用构造函数时,需要提供几个类型、顺序一致的实际参数,指明新建对象各域的初始值。,构造函数的调用是在用new运算符创建类对象时由系统自动完成。定义了构造函数之后,就可以用如下的语句创建并初始化PhoneCard对象:PhoneCard newCard=ne

24、w PhoneCard(33006655,6666,100.0,300);说明:newCard是新建对象名关键字new通知系统开辟内存单元,创建运算符第一个PhoneCard说明新对象属于哪个类第二个PhoneCard用来隐含调用PhoneCard类的构造函数这个对象的卡号是33006655,密码是6666,金额是100.0,电话卡的接入号码是字符串“300”。,例 UsePhoneCard.java1:public class UsePhoneCard2:3:public static void main(String args)4:/创建一个PhoneCard的对象myCard 5:Pho

25、neCard myCard=new PhoneCard(12345678,1234,50.0,300);/调用myCard的方法toString(),/把myCard中的各个域数据组合成一段信息在屏幕上输出。6:System.out.println(myCard.toString();7:8:,9:class PhoneCard10:11:long cardNumber;12:private int password;13:double balance;14:String connectNumber;15:boolean connected;16:/构造函数17:PhoneCard(long

26、cn,int pw,double b,String s)18:19:cardNumber=cn;20:password=pw;21:if(b 0)22:balance=b;23:else24:System.exit(1);,25:connectNumber=s;26:connected=false;27:28:boolean performConnection(long cn,int pw)29:/方法1,实现连接30:if(cn=cardNumber 39:40:,41:double getBalance()/方法2,返回余额42:43:if(connected)44:return bala

27、nce;45:else46:return-1;47:48:void performDial()/方法3,拨号扣款49:50:if(connected)51:balance-=0.5;52:,53:public String toString()/方法4,显示卡上的信息54:55:String s=电话卡接入号码:+connectNumber56:+n电话卡卡号:+cardNumber57:+n电话卡密码:+password58:+n剩余金额:+balance;59:if(connected)60:return(s+n电话已接通。);61:else62:return(s+n电话未接通。);63:

28、64:,3.3 Java的非访问控制符,Java的非访问控制符 static 静态修饰符 修饰属性和方法 abstract 抽象修饰符 修饰类和方法 final 最终修饰符 修饰类、属性和方法3.3.1 静态属性、静态方法与静态初始化器 static是静态修饰符。()静态属性 被static修饰的属性不属于任何一个类的具体对象,是公共的存储单元。任何对象访问它时,取到的都是相同的数值。静态属性是类属性。当需要引用或修改一个static限定的类属性时,可以使用类名,也可以使用某一个对象名,效果相同。,()静态方法,用static修饰符修饰的方法,是属于整个类的方法。例如,在PhoneCard20

29、0中如果需要修改附加费,可以定义一个静态方法setAdditory():static void setAdditory(double newAdd)if(newAdd 0)additoryFee=newAdd;用static修饰的方法的含义:1)调用这个方法时应该使用类名做前缀,不用某个具体的对象名;2)该方法属于整个类,它在内存中的代码段随着类的定义而分配和装载;3)该方法不能操纵属于某个对象的成员变量,即static方法只能处理static属性。,(3)静态初始化器,直接用static 当名字、用 包起来的一段特殊代码。与构造函数类似,完成初始化工作,但两者的区别是:静态初始化器对每个类初

30、始化,构造函数对每个新创建的对象初始化。静态初始化器在所属的类加载入内存时由系统调用运行,构造函数则在产生新对象时由系统自动执行。静态初始化器不是方法,没有方法名、返回值和参数列表。总之,静态初始化器对整个类完成初始化操作,包括给static类成员赋初值。,例 TestStatic.java,/测试静态属性、静态方法与静态初始化器的综合例题public class TestStaticpublic static void main(String args)PhoneCard200 my200_1=new PhoneCard200(100.0);PhoneCard200 my200_2=new

31、PhoneCard200(200.5);/测试静态初始化器System.out.println(第1张200卡的卡号:+my200_1.cardNumber);System.out.println(第1张200卡的金额:+my200_1.balance);System.out.println(第1张200卡的附加费:+my200_1.additoryFee);System.out.println(第1张200卡的密码:+my200_1.password);System.out.println(第2张200卡的卡号:+my200_2.cardNumber);System.out.println(

32、第2张200卡的金额:+my200_2.balance);System.out.println(第2张200卡的附加费:+my200_2.additoryFee);System.out.println(第2张200卡的密码:+my200_2.password);,System.out.println(-直接操作修改静态属性:测试静态属性);my200_1.additoryFee=0.4;/直接操作修改对象的静态属性,可以实现对类和其它同类对象同一属性的修改System.out.println(第2张200卡的附加费:+my200_2.additoryFee);System.out.printl

33、n(200卡类的附加费:+PhoneCard200.additoryFee);System.out.println(第1张200卡类的附加费:+my200_1.additoryFee);System.out.println(-调用静态方法修改静态属性:测试静态方法);PhoneCard200.setAdditory(0.6);/调用静态方法修改类的静态属性,可以实现其所有同类对象同一属性的修改System.out.println(“修改后第1张200卡类的附加费:+my200_1.additoryFee);System.out.println(修改后第2张200卡的附加费:+my200_2.a

34、dditoryFee);,System.out.println(-测试修改密码的各种方法);my200_2.password=222;/用普通赋值法给对象的非静态属性赋值 System.out.println(第2张200卡的密码:+my200_2.password);/对该对象的非静态属性操作有效 System.out.println(第1张200卡的密码:+my200_1.password);/对其它同类对象的非静态属性操作无效/PhoneCard200.password=333;/用普通赋值法给类的非属性赋值,编译不能通过my200_2.changePwd(666);/调用类中的方法实现

35、密码的修改System.out.println(第2张200卡的密码:+my200_2.password);/对该对象的非静态属性操作有效System.out.println(第1张200卡的密码:+my200_1.password);/对其它同类对象的非静态属性操作无效,class PhoneCard200/定义类:PhoneCard200 static long nextCardNumber;static String connectNumber=200;static double additoryFee;/静态属性long cardNumber;int password=111;bool

36、ean connected;double balance;PhoneCard200(double bi)/构造函数 cardNumber=nextCardNumber+;balance=bi;static/静态初始化器 nextCardNumber=2001800001;additoryFee=0.2;,static void setAdditory(double newAdd)/静态方法 if(newAdd0)additoryFee=newAdd;/password=6666;/静态方法不能操作非静态变量 int changePwd(int pwd)/普通方法 password=pwd;re

37、turn pwd;,3.3.2 抽象类与抽象方法,用abstract修饰的类或方法。(1)抽象类 没有具体实例对象的类。使用抽象类的优点就是可以充分利用公共属性来提高开发和维护程序的效率。例:我们以交通工具类作为例子,它代表了所有具体交通工具的共同属性,如速度、加速、减速等。,java语句可表述为:abstract class transportmeans float speed;/速度 void start()/启动.void stop()/停止.float speedUp(float increaseSpeed)/加速.,(2)抽象方法,用abstract声明的仅有方法头而没有具体的方法体

38、和 操作实现的抽象方法。方法体的具体实现由当前类的不同子类在各自的类定义中完成。只能把abstract方法作为一个共同的接口。所有的抽象方法必须存在于抽象类中。使用abstract方法可以隐藏具体的细节信息。,例 TestAbstract.java,public class TestAbstract/抽象类与抽象方法的使用 public static void main(String args)PhoneCard200 my200=new PhoneCard200(50.0);/用PhoneCard200的构造函数初始化对象my200PhoneCard200 my2002=new PhoneC

39、ard200(60.0);/用PhoneCard200的构造函数初始化对象my2002IC_Card myIC=new IC_Card(50.0);/用IC_Card的构造函数初始化对象myICSystem.out.println(200卡可以拨打+my200.TimeLeft()+次电话。);System.out.println(IC 卡可以拨打+myIC.TimeLeft()+次电话。);System.out.println(第1张200卡的卡号:+my200.cardNumber);System.out.println(第2张200卡的卡号:+my2002.cardNumber);Sys

40、tem.out.println(第2张200卡可以拨打+my2002.TimeLeft()+次电话。);,abstract class PhoneCard/抽象类double balance;abstract void performDial();/抽象方法,不需要定义方法体/void performChangePwd();/出错,要么加上abstract,要么定义方法体double TimeLeft()/一般方法,需要定义方法体,计算可以拨打的次数double current=balance;int times=0;doperformDial();/调用抽象方法times+;while(ba

41、lance=0);balance=current;return times-1;,class PhoneCard200 extends PhoneCardstatic long nextCardNumber;static final String connectNumber=200;static double additoryFee;long cardNumber;int password;boolean connected;static/静态初始化器,初始化类nextCardNumber=2001800001;additoryFee=0.1;PhoneCard200(double ib)/P

42、honeCard200的构造函数cardNumber=nextCardNumber+;balance=ib;void performDial()/子类PhoneCard200实现的抽象方法balance-=0.5+additoryFee;/abstract void performChange();/出错,非抽象类不可以定义抽象方法,class IC_Card extends PhoneCardIC_Card(double ib)/IC_Card的构造函数balance=ib;void performDial()/子类IC_Card实现的抽象方法balance-=0.8;,3.3.3 最终类、

43、最终属性、最终方法,用final最终修饰符来修饰类、属性和方法。(1)最终类不可能有子类(2)最终属性(域)可用来修饰常量,若成员变量被声明为final,则整个执行过程中都不会变。语法:static final double additoryFee=0.1;注意:需要说明常量的数据类型需要同时指出常量的具体取值为了节省空间,常量通常被声明为static,(3)最终方法功能和语句都不能被修改的最终方法,即不能被当前类的子类重载。目的是为了预防不必要的重复定义。例:final double getAdditoryFee()return additoryFee;注意:所有已被private修饰符限定

44、为私有的方法,以及所有包含在final类中的方法,都被缺省地认为是final的。,例:TestFinal.java,/最终类、最终方法、最终属性、终结器的综合例题public class TestFinalpublic static void main(String args)PhoneCard200 my200_1=new PhoneCard200(100.0);PhoneCard200 my200_2=new PhoneCard200(200.5);System.out.println(第1张200卡的卡号:+my200_1.cardNumber);System.out.println(第

45、1张200卡的金额:+my200_1.balance);System.out.println(第1张200卡的附加费:+my200_1.additoryFee);System.out.println(第1张200卡的密码:+my200_1.getAdditoryFee();System.out.println(第2张200卡的卡号:+my200_2.cardNumber);System.out.println(第2张200卡的金额:+my200_2.balance);System.out.println(第2张200卡的连接号:+my200_2.connectNumber);my200_1.s

46、etAdditory(0.9);System.out.println(修改后第2张200卡的连接号:+my200_2.connectNumber);/my200_1.additoryFee=0.4;/出错,不能给对象的最终属性赋值/PhoneCard200.setAdditory(0.6);/出错,不能修改对象的最终属性 IC_Card myIC=new IC_Card(50.0);System.out.println(IC 卡可以拨打+myIC.TimeLeft()+次电话。);,final class PhoneCard/定义为final 最终类,则下面的IC卡不能定义为其子类,若定义为抽

47、象类,IC卡可以为子类double balance;/abstract void performDial();/final中不能定义抽象方法double TimeLeft()/一般方法,需要定义方法体,计算可以拨打的次数double current=balance;int times=0;do/performDial();/不能调用该方法times+;while(balance=0);balance=current;return times-1;,class PhoneCard200/定义类:PhoneCard200 static long nextCardNumber;static Stri

48、ng connectNumber=200;static final double additoryFee=0.5;/静态最终属性,被赋值后就不可以再修改/这里如果不赋值,可以在静态初始化器中修改long cardNumber;int password=222;boolean connected;double balance;PhoneCard200(double bi)/构造函数 cardNumber=nextCardNumber+;balance=bi;static/静态初始化器 nextCardNumber=2001800001;/additoryFee=0.2;/出错,如果定义时没有赋初

49、值才可以,static void setAdditory(double newAdd)/静态方法 if(newAdd0)/additoryFee=newAdd;/不能操作最终变量connectNumber=300;final double getAdditoryFee()/最终方法return additoryFee;void performDial()/PhoneCard200的方法balance-=0.5+additoryFee;/*class IC_Card extends PhoneCard/PhoneCard被定义为final则不能有子类IC_Card(double ib)/IC_C

50、ard的构造函数balance=ib;void performDial()/子类IC_Card的方法balance-=0.8;*/,3.4 Java的访问控制符,3.4.1 Java的访问控制符种类 public 公共的,修饰类、属性和方法 private 私有的,修饰属性和方法 protected 受保护的,修饰属性和方法 private protected 私有受保护的,修饰属性和方法 无符号的缺省定义 友好的,修饰类、属性和方法作用:限定类、属性和方法被程序里的其他部分访问和调用,3.4.2 语法结构,修饰符1、修饰符2.修饰符N class 类名.修饰符1、修饰符2.修饰符N 数据类型

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号