《Java类与抽象封装-精品文档.pptx》由会员分享,可在线阅读,更多相关《Java类与抽象封装-精品文档.pptx(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java类与抽象封装谢卫华中国传媒大学理工学部计算机学院Java类与抽象封装nJava 类的特点概念类的特点概念nJava类的声明引用类的声明引用nJava类的数据成员类的数据成员nJava类的成员方法类的成员方法232.1 2.1 面向对象的程序设计方法概述面向对象的程序设计方法概述( (续续) )n面向对象的程序设计面向对象的程序设计v与结构化程序设计方法相比,更符合人类认识现实世界与结构化程序设计方法相比,更符合人类认识现实世界的思维方式的思维方式 v已成为程序设计的主流方向已成为程序设计的主流方向v涉及的主要概念涉及的主要概念抽象抽象封装封装继承继承多态多态 Java类与抽象封装34n
2、对象对象v现实世界中现实世界中万物皆对象万物皆对象都具有都具有各自的属性,对外界都呈现各自的行为各自的属性,对外界都呈现各自的行为 v程序中程序中一切都是对象一切都是对象都具有标识都具有标识 (identity), 属性和行为属性和行为(方法方法)通过一个或多个变量来保存其状态通过一个或多个变量来保存其状态通过方法通过方法(method) 实现他的行为实现他的行为Java类与抽象封装45n类类v将属性及行为相同或相似的对象归为一类将属性及行为相同或相似的对象归为一类v类可以看成是对象的抽象,代表了此类对象所具有的共类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为有属性和行为v在面向
3、对象的程序设计中,每一个对象都属于某个特定在面向对象的程序设计中,每一个对象都属于某个特定的类的类, Java类与抽象封装5类与对象类与对象n类是对某一类事物的描述,是抽象的、概念上的定类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而义;对象是实际存在的该类事物的每个个体,因而也称实例(也称实例(instance)具体的实例具体的实例具体的实例具体的实例具体的实例具体的实例抽象的概念6换种方式解释:类与对象的关系换种方式解释:类与对象的关系n类就相当于是一个模板,依照此模板产生产品类就相当于是一个模板,依照此模板产生产品78n结构化程序设计结构化程序设计
4、v通常由若干个程序模块组成,每个程序模块都可以是子通常由若干个程序模块组成,每个程序模块都可以是子程序或函数程序或函数v数据和功能分离,代码难于维护和复用数据和功能分离,代码难于维护和复用n面向对象程序设计面向对象程序设计v基本组成单位是类基本组成单位是类v程序在运行时由类生成对象,对象是面向对象程序的核程序在运行时由类生成对象,对象是面向对象程序的核心心v对象之间通过发送消息进行通信,互相协作完成相应功对象之间通过发送消息进行通信,互相协作完成相应功能能Java类与抽象封装89抽象抽象n抽象抽象v忽略问题中与当前目标无关的方面,以便更充分地注忽略问题中与当前目标无关的方面,以便更充分地注意与
5、当前目标有关的方面意与当前目标有关的方面n例:钟表例:钟表v数据数据(属性属性)int Hour; int Minute; int Second;v方法方法(行为行为)SetTime(); ShowTime();Java的类与抽象封装910封装封装n封装封装v是一种信息隐蔽技术是一种信息隐蔽技术v利用抽象数据类型将数据和基于数据的操作封装在一起利用抽象数据类型将数据和基于数据的操作封装在一起v用户只能看到对象的封装界面信息,对象的内部细节对用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的用户是隐蔽的v封装的目的在于将对象的使用者和设计者分开,使用者封装的目的在于将对象的使用者和设计
6、者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息不必知道行为实现的细节,只需使用设计者提供的消息来访问对象来访问对象Java的类与抽象封装1011n封装的定义封装的定义v清楚的边界清楚的边界所有对象的内部信息被限定在这个边界内所有对象的内部信息被限定在这个边界内v接口接口对象向外界提供的方法,外界可以通过这些方法与对象进行交互对象向外界提供的方法,外界可以通过这些方法与对象进行交互v受保护的内部实现受保护的内部实现功能的实现细节,不能从类外访问。功能的实现细节,不能从类外访问。封装封装(续续)Java的类与抽象封装1112继承继承n继承继承v是指新的类可以获得已有类(称为超类、基
7、类或父类)是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子的属性和行为,称新类为已有类的派生类(也称为子类)类)v在继承过程中派生类继承了基类的特性,包括方法和在继承过程中派生类继承了基类的特性,包括方法和实例变量实例变量v派生类也可修改继承的方法或增加新的方法,使之更派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要适合特殊的需要v有助于解决软件的可重用性问题,使程序结构清晰,有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量降低了编码和维护的工作量Java的类与抽象封装1213n单继承单继承v任何一个派生类都只有单
8、一的直接父类任何一个派生类都只有单一的直接父类v类层次结构为树状结构类层次结构为树状结构n多继承多继承v一个类可以有一个以上的直接父类一个类可以有一个以上的直接父类v类层次结构为网状结构,设计及实现比较复杂类层次结构为网状结构,设计及实现比较复杂nJavaJava语言仅支持单继承语言仅支持单继承继承继承(续续)Java的类与抽象封装1314多态多态n多态多态v一个程序中同名的不同方法共存一个程序中同名的不同方法共存v主要通过子类对父类方法的覆盖来实现主要通过子类对父类方法的覆盖来实现v不同类的对象可以响应同名的消息不同类的对象可以响应同名的消息(方法方法) ,具体的实现,具体的实现方法却不同方
9、法却不同v使语言具有灵活、抽象、行为共享、代码共享的优势,使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题很好地解决了应用程序方法同名问题Java的类与抽象封装1415n类与对象类与对象v在程序中,对象是通过一种抽象数据类型来描述的,这在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类种抽象数据类型称为类(Class)v一个类是对一类对象的描述。一个类是对一类对象的描述。类是构造对象的模板类是构造对象的模板v对象是类的具体实例对象是类的具体实例类与对象类与对象Java的类与抽象封装1516 类的声明类的声明n声明形式声明形式public abs
10、tract | final class 类名称类名称 extends 父类名称父类名称 implements 接口名称列表接口名称列表 变量成员声明及初始化;变量成员声明及初始化; 方法声明及方法体;方法声明及方法体;Java的类与抽象封装1617n关键字关键字vclass表明其后声明的是一个类。表明其后声明的是一个类。vextends如果所声明的类是从某一父类派生而来,那么,父类的名字应写如果所声明的类是从某一父类派生而来,那么,父类的名字应写在在extends之后之后vimplements如果所声明的类要实现某些接口,那么,接口的名字应写在如果所声明的类要实现某些接口,那么,接口的名字应写
11、在implements之后之后类的声明类的声明(续续)Java的类与抽象封装1718n修饰符修饰符v可以有多个,用来限定类的使用方式可以有多个,用来限定类的使用方式vpublic表明此类为公有类表明此类为公有类vabstract指明此类为抽象类指明此类为抽象类vfinal指明此类为终结类指明此类为终结类 n类声明体类声明体v变量成员声明及初始化变量成员声明及初始化可以有多个可以有多个v方法声明及方法体方法声明及方法体可以有多个可以有多个类的声明类的声明(续续)Java的类与抽象封装1819n钟表类钟表类public class Clock / 成员变量成员变量 int hour ; int m
12、inute ; int second ; / 成员方法成员方法 public void setTime(int newH, int newM, int newS) hour=newH ; minute=newM ; second=news ; public void showTime() System.out.println(hour+:+minute+:+second); 类的声明类的声明(续续)例例2-1Java的类与抽象封装1920n变量和对象变量和对象v变量除了存储基本数据类型的数据,还能存储对象的变量除了存储基本数据类型的数据,还能存储对象的引用,用来存储对象引用的变量称为引用变量引
13、用,用来存储对象引用的变量称为引用变量v类的对象也称为类的实例类的对象也称为类的实例对象的声明与引用对象的声明与引用Java的类与抽象封装2021n对象的声明对象的声明v格式格式类名类名 变量名变量名 例如例如Clock是已经声明的类名,则下面语句声明的变量是已经声明的类名,则下面语句声明的变量aclock将用于存储该类对象的引用:将用于存储该类对象的引用: Clock aclock; v声明一个引用变量时并没有对象生成声明一个引用变量时并没有对象生成对象的声明与引用对象的声明与引用(续续)Java的类与抽象封装2122n对象的创建对象的创建v生成实例的格式:生成实例的格式:new () 例如
14、:例如: aclock=new Clock()其作用是:其作用是:在内存中为此对象分配内存空间在内存中为此对象分配内存空间返回对象的引用返回对象的引用(reference ,相当于对象的存储地址相当于对象的存储地址)v引用变量可以被赋以空值引用变量可以被赋以空值例如:例如:aclock=null;对象的声明与引用对象的声明与引用(续续)Java的类与抽象封装2223n自动装箱拆箱自动装箱拆箱vJava 5新增特性,基本数据类型的自动装箱拆箱新增特性,基本数据类型的自动装箱拆箱v自动装箱自动装箱Java 5之前:之前:Integer i = new Integer(2); Java 5:Inte
15、ger i = 3;v自动拆箱自动拆箱Java 5 之前:之前:int j = i.intValue(); /i为为Integer类型的对象类型的对象Java 5:int j = i; /i为为Integer类型的对象类型的对象对象的声明与引用对象的声明与引用(续续)Java的类与抽象封装2324数据成员数据成员n数据成员数据成员v表示表示Java类的状态类的状态v声明数据成员必须给出变量名及其所属的类型,同时还可声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性以指定其他特性v在一个类中成员变量名是唯一的在一个类中成员变量名是唯一的v数据成员的类型可以是数据成员的类型可以是Ja
16、va中任意的数据类型中任意的数据类型(简单类型,简单类型,类,接口,数组类,接口,数组)Java的类与抽象封装2425v声明格式声明格式public | protected | private static finaltransient volatile变量数据类型变量数据类型 变量名变量名1=变量初值变量初值, 变量名变量名2=变量初值变量初值, ;v格式说明格式说明public、protected、private 为访问控制符为访问控制符static指明这是一个静态成员变量指明这是一个静态成员变量final指明变量的值不能被修改指明变量的值不能被修改transient指明变量是临时状态指明
17、变量是临时状态volatile指明变量是一个共享变量指明变量是一个共享变量数据成员数据成员(续续)Java的类与抽象封装2526n实例变量实例变量v没有没有static修饰的变量称为实例变量修饰的变量称为实例变量(Instance Variables)v用来存储所有实例都需要的属性信息,不同实例的属性用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同值可能会不同v可通过下面的表达式访问实例属性的值可通过下面的表达式访问实例属性的值.数据成员数据成员(续续)Java的类与抽象封装2627n声明一个表示圆的类,保存在文件声明一个表示圆的类,保存在文件Circle.java 中。然后编中。
18、然后编写测试类,保存在文件写测试类,保存在文件ShapeTester.java中,并与中,并与Circle.java放在相同的目录下放在相同的目录下public class Circle int radius; public class ShapeTester public static void main(String args) Circle x; x = new Circle(); System.out.println(x); System.out.println(radius = + x.radius); 数据成员数据成员(续续)Java的类与抽象封装2728n编译后运行结果如下:编译
19、后运行结果如下:Circle26b249radius =0n解释解释v默认的默认的toString()返回:返回:vgetClass().getName() + “” + Integer.toHexString(hashCode() 数据成员数据成员(续续)Java的类与抽象封装2829n声明一个表示矩形的类声明一个表示矩形的类,保存在保存在Rectangle.java中;编写测试类,中;编写测试类,保存在保存在ShapeTester.java中,二文件保存在相同的目录下中,二文件保存在相同的目录下public class Rectangle double width = 10.128; do
20、uble height = 5.734; public class ShapeTester public static void main(String args) Circle x; Rectangle y; x = new Circle(); y = new Rectangle(); System.out.println(x + + y); 数据成员数据成员(续续)Java的类与抽象封装2930n编译后运行结果如下:编译后运行结果如下:Circle82f0db Rectangle92d342n解释解释vCircle及及Rectangle类对象的状态如图类对象的状态如图数据成员数据成员(续续
21、)Java的类与抽象封装3031n对对ShapeTester类进行修改,使两个实例具有不同的实例变量值类进行修改,使两个实例具有不同的实例变量值public class ShapeTester public static void main(String args) Circle x; Rectangle y, z; x = new Circle(); y = new Rectangle(); z = new Rectangle(); x.radius = 50; z.width = 68.94; z.height = 47.54; System.out.println(x.radius +
22、+ y.width + + z.width); 数据成员数据成员(续续)Java的类与抽象封装3132n编译后运行结果如下:编译后运行结果如下:50 10.128 68.94n解释解释vCircle及及Rectangle类对象的状态如图类对象的状态如图数据成员数据成员(续续)Java的类与抽象封装3233n地址簿程序地址簿程序v一个人的地址通常包括以下信息:一个人的地址通常包括以下信息:姓名,省份,城市,街道,门牌号,邮政编码姓名,省份,城市,街道,门牌号,邮政编码v采用过程化的程序设计方法,使用简单变量存储,则存采用过程化的程序设计方法,使用简单变量存储,则存储两个人地址的代码如下储两个人地
23、址的代码如下数据成员数据成员(续续)Java的类与抽象封装3334public static void main(String args) String name1,name2; int gateNumber1, gateNumber2; String streetName1,streetName2; String city1,city2; String province1,province2; String postalCode1,postalCode2; name1 = Zhang Li; gateNumber1 = 15; streetName1 = Tsinghua East Road
24、; city1 = Beijing; province1 = “Beijing; postalCode1 = 100084; name2 = Li Hong; gateNumber2 = 2; streetName2 = BeiNong; city2 = Beijing; province2 = Beijing; postalCode2 = 102206; /.do something interesting 数据成员数据成员(续续)Java的类与抽象封装3435v采用面向对象的程序设计方法,则需要首先声明采用面向对象的程序设计方法,则需要首先声明Address类如下类如下public cla
25、ss Address String name; int gateNumber; String streetName; String city; String province; String postalCode; /方法成员略方法成员略 数据成员数据成员(续续)Java的类与抽象封装3536v主方法改写如下主方法改写如下public static void main(String args) Address address1 = new Address(), address2 = new Address(); address1.name = “Zhang Li; address1.stree
26、tNumber = 15; address1.streetName = “Tsinghua East Road; address1.city = “Beijing; address1.province = “Beijing; address1.postalCode = “100084; address2.name = “Li Hong; address2.streetNumber = 2; address2.streetName = “BeiNong; address2.city = “Beijing; address2.province = “Beijing; address2.postal
27、Code = “102206; /.do something interesting 数据成员数据成员(续续)Java的类与抽象封装3637n类变量类变量v也称为静态变量,声明时需加也称为静态变量,声明时需加static修饰符修饰符v不管类的对象有多少,类变量只存在一份,在整个类中只有一不管类的对象有多少,类变量只存在一份,在整个类中只有一个值个值v类初始化的同时就被赋值类初始化的同时就被赋值v适用情况适用情况类中所有对象都相同的属性类中所有对象都相同的属性经常需要共享的数据经常需要共享的数据系统中用到的一些常量值系统中用到的一些常量值v引用格式引用格式.数据成员数据成员(续续)Java的类与
28、抽象封装3738n对于一个圆类的所有对象,计算圆的面积时,都需用到对于一个圆类的所有对象,计算圆的面积时,都需用到的的值,可在值,可在Circle类的声明中增加一个类属性类的声明中增加一个类属性PIpublic class Circle static double PI = 3.14159265; int radius; 当我们生成当我们生成Circle类的实例时,在每一个实例中并类的实例时,在每一个实例中并没有存储没有存储PI的值,的值,PI的值存储在类中的值存储在类中数据成员数据成员(续续)Java的类与抽象封装3839v对类变量进行测试对类变量进行测试public class Class
29、VariableTester public static void main(String args) Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); v测试结果测试结果3.141592653.141592653.143.14数据成员数据成员(续续)Java的类与抽象封装3940n声明一个声明一个Point类,有两个私有变量保存点坐
30、标,一个类变类,有两个私有变量保存点坐标,一个类变量保存已有点的个数量保存已有点的个数public class Point private int x; private int y; public static int pointCount=0; public Point(int x, int y) this.x = x; this.y = y; pointCount+;数据成员数据成员(续续)Java的类与抽象封装4041n测试类测试类ex2_4class ex2_4 public static void main(String args) Point p = new Point(1,1);
31、 System.out.println(p.pointCount); Point q = new Point(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount = Point.pointCount); System.out.println(Point.pointCount);数据成员数据成员(续续)Java的类与抽象封装4142n测试结果测试结果12true2 数据成员数据成员(续续)Java的类与抽象封装4243n实例变量和类变量都可被声明为实例变量和类变量都可被声明为finalnfinal实例变量
32、必须在每个构造方法结束之前赋初值,实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化以保证使用之前会被初始化nfinal类变量必须在声明的同时初始化类变量必须在声明的同时初始化数据成员数据成员(续续)Java的类与抽象封装4344n方法成员方法成员v定义类的行为定义类的行为一个对象能够做的事情一个对象能够做的事情我们能够从一个对象取得的信息我们能够从一个对象取得的信息v可以没有,也可以有多个;一旦在类中声明了方法,可以没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分它就成为了类声明的一部分v分为实例方法和类方法分为实例方法和类方法数据成员数据成员(续续)Jav
33、a的类与抽象封装4445 声明格式声明格式public | protected | private static finalabstract native synchronized返回类型返回类型 方法名方法名(参数列表参数列表) throws exceptionList方法体方法体数据成员数据成员(续续)Java的类与抽象封装4546 格式说明格式说明方法修饰方法修饰public、protected、private 为存取控制符为存取控制符static指明方法是一个类方法指明方法是一个类方法final指明方法是一个终结方法指明方法是一个终结方法abstract指明方法是一个抽象方法指明方法是
34、一个抽象方法native用来集成用来集成java代码和其它语言的代码代码和其它语言的代码synchronized用来控制多个并发线程对共享用来控制多个并发线程对共享数据的访问数据的访问成员成员方法方法(续续)Java的类与抽象封装4647v格式说明格式说明(续续)返回类型返回类型方法返回值的类型,可以是任意的方法返回值的类型,可以是任意的Java数据类型数据类型当不需要返回值时,返回类型为当不需要返回值时,返回类型为void参数类型参数类型简单数据类型,简单数据类型,引用类型引用类型(数组、类或接口数组、类或接口)可以有多个参数,也可以没有参数,方法声明时的参数称为形式参可以有多个参数,也可以
35、没有参数,方法声明时的参数称为形式参数数方法体方法体方法的实现方法的实现包括局部变量的声明以及所有合法的包括局部变量的声明以及所有合法的Java指令指令局部变量的作用域只在该方法内部局部变量的作用域只在该方法内部throws exceptionList用来处理异常用来处理异常成员成员方法方法(续续)Java的类与抽象封装4748n方法调用方法调用v给对象发消息意味着调用对象的某个方法给对象发消息意味着调用对象的某个方法从对象中取得信息从对象中取得信息 修改对象的状态或进行某种操作修改对象的状态或进行某种操作 进行计算及取得结果等进行计算及取得结果等v调用格式调用格式.(参数列表)(参数列表)称
36、点操作符称点操作符“.”前面的前面的为消息的接收者为消息的接收者(receiver)v参数传递参数传递值传递:参数类型为基本数据类型时值传递:参数类型为基本数据类型时引用传递:参数类型为对象类型或数组时引用传递:参数类型为对象类型或数组时成员成员方法方法(续续)Java的类与抽象封装4849n 实例方法实例方法v表示特定对象的行为表示特定对象的行为v声明时前面不加声明时前面不加static修饰符修饰符v使用时需要发送给一个类实例使用时需要发送给一个类实例成员成员方法方法(续续)Java的类与抽象封装4950n在在Circle类中声明计算周长的方法类中声明计算周长的方法 public class
37、 Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; v 由于由于radius是实例变量,在程序运行时,是实例变量,在程序运行时,Java会自动取其接收者会自动取其接收者对象的属性值对象的属性值v 也可将也可将circumference方法体改为:方法体改为:return 2 * PI * this.radius; 关键字关键字this代表此方法的接收者对象代表此方法的接收者对象成员成员方法方法(续续)Java的类与抽象封装5051n方法调
38、用测试方法调用测试public class CircumferenceTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); double circum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); Syste
39、m.out.println(Circle 2 has circumference + circum2); 成员成员方法方法(续续)Java的类与抽象封装5152n运行结果运行结果Circle 1 has circumference 314.159265Circle 2 has circumference 62.831853n说明说明v在使用实例方法时,需要将其发送给一个实例对象(也称给对在使用实例方法时,需要将其发送给一个实例对象(也称给对象发送一条消息),象发送一条消息),radius的值即是接收者对象的值的值即是接收者对象的值v在执行在执行c1.circumference()时,时,rad
40、ius的值为的值为c1的的radius属性属性值;在执行值;在执行c2.circumference()时,时,radius的值为的值为c2的的radius属性值属性值成员成员方法方法(续续)Java的类与抽象封装5253n在在Circle类及类及Rectangle类中声明计算面积的方法类中声明计算面积的方法area()public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() re
41、turn PI * radius * radius; public class Rectangle double width; double height; public double area() return width * height; 成员成员方法方法(续续)Java的类与抽象封装5354n声明测试类,对声明测试类,对Circle类及类及Rectangle类的类的area()方法进方法进行测试行测试 public class AreaTester public static void main(String args) Circle c = new Circle(); c.radiu
42、s = 50; Rectangle r = new Rectangle(); r.width = 20; r.height = 30; System.out.println(Circle has area + c.area(); System.out.println(Rectangle has area + r.area(); 成员成员方法方法(续续)Java的类与抽象封装5455n运行结果运行结果Circle has area 7853.981625Rectangle has area 600.0n说明说明v不同的类中可以声明相同方法名的方法不同的类中可以声明相同方法名的方法v使用时,系统会
43、根据接收者对象的类型找到相应类的方使用时,系统会根据接收者对象的类型找到相应类的方法法成员成员方法方法(续续)Java的类与抽象封装5556n带参数的方法举例:在带参数的方法举例:在Circle类中增加方法改变圆的半径类中增加方法改变圆的半径public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; public void
44、enlarge(int factor) radius = radius * factor; 成员成员方法方法(续续)Java的类与抽象封装5657n测试类测试类public class EnlargeTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; System.out.println(Circle 1 的周长的周长: + c1.circumference(); System.out.pri
45、ntln(Circle 2 的周长的周长: + c2.circumference(); c2.enlarge(4); System.out.println(Circle 2 扩大后的周长扩大后的周长: + c2.circumference(); 成员成员方法方法(续续)Java的类与抽象封装5758n运行结果运行结果Circle 1 的周长的周长: 314.159265Circle 2 的周长的周长: 62.831853Circle 2 扩大后的周长扩大后的周长: 251.327412成员成员方法方法(续续)Java的类与抽象封装5859n以对象作为参数的方法举例:在以对象作为参数的方法举例:
46、在Circle类中增加类中增加fitsInside方法判断一个圆是否在一个长方形内,需要方法判断一个圆是否在一个长方形内,需要以以Rectangle类的对象作为参数类的对象作为参数public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public void enlarge(int factor) radius = radius * factor; public boolean fitsInside (Rectangl
47、e r) return (2 * radius r.width) & (2 * radius r.height); 成员成员方法方法(续续)Java的类与抽象封装5960 测试类测试类 public class InsideTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 8; Circle c2 = new Circle(); c2.radius = 15; Rectangle r = new Rectangle(); r.width = 20; r.height = 30; S
48、ystem.out.println(Circle 1 fits inside Rectangle: + c1.fitsInside(r); System.out.println(Circle 2 fits inside Rectangle: + c2.fitsInside(r); 成员成员方法方法(续续)Java的类与抽象封装6061n运行结果运行结果Circle 1 fits inside Rectangle: trueCircle 2 fits inside Rectangle: false成员成员方法方法(续续)Java的类与抽象封装6162n类方法类方法v也称为静态方法,表示类中对象的
49、共有行为也称为静态方法,表示类中对象的共有行为v声明时前面需加声明时前面需加static修饰符修饰符v不能被声明为抽象的不能被声明为抽象的v类方法可以在不建立对象的情况下用类名直接调用,类方法可以在不建立对象的情况下用类名直接调用,也可用类实例调用也可用类实例调用成员成员方法方法(续续)Java的类与抽象封装6263n将摄氏温度将摄氏温度(centigrade)转换成华氏温度转换成华氏温度(fahrenheit)v 转换公式为转换公式为 fahrenheit = centigrade * 9 / 5 + 32v 除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体除了摄氏温度值及公式中需要的
50、常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法的类实例的属性值,因此可声明为类方法v 转换方法转换方法centigradeToFahrenheit放在类放在类Converter中中public class Converter public static int centigradeToFahrenheit(int cent) return (cent * 9 / 5 + 32); v 方法调用方法调用Converter.centigradeToFahrenheit(40)成员成员方法方法(续续)Java的类与抽象封装6364n从从Java 5开始,可以在方法的参数中使用可变长开