Java类与对象基本概念课件.ppt

上传人:牧羊曲112 文档编号:1285840 上传时间:2022-11-04 格式:PPT 页数:124 大小:494.17KB
返回 下载 相关 举报
Java类与对象基本概念课件.ppt_第1页
第1页 / 共124页
Java类与对象基本概念课件.ppt_第2页
第2页 / 共124页
Java类与对象基本概念课件.ppt_第3页
第3页 / 共124页
Java类与对象基本概念课件.ppt_第4页
第4页 / 共124页
Java类与对象基本概念课件.ppt_第5页
第5页 / 共124页
点击查看更多>>
资源描述

《Java类与对象基本概念课件.ppt》由会员分享,可在线阅读,更多相关《Java类与对象基本概念课件.ppt(124页珍藏版)》请在三一办公上搜索。

1、第二章类与对象的基本概念,1,第二章类与对象的基本概念1,2,本章内容面向对象程序设计的基本概念和思想Java 类与对象的基本概念和语法,包括类的声明、类成员的访问,以及对象的构造、初始化和回收本章要求理解类和对象的概念熟练使用类及其成员的访问控制方法熟练掌握各种构造方法了解java的垃圾回收机制,2本章内容,2.1 面向对象的程序设计方法概述,面向对象的程序设计(Object Oriented Programming,简称OOP)与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向涉及的主要概念抽象(abstraction)封装(encapsulation)继

2、承(inheritance)多态(polymorphism),3,2.1 面向对象的程序设计方法概述面向对象的程序设计3,2.1 面向对象的程序设计方法概述(续),对象现实世界中万物皆对象都具有各自的属性,对外界都呈现各自的行为 程序中一切都是对象都具有标识 (identity), 属性和行为(方法)通过一个或多个变量来保存其状态通过方法(method) 实现他的行为,4,2.1 面向对象的程序设计方法概述(续)对象4,2.1 面向对象的程序设计方法概述(续),类将属性及行为相同或相似的对象归为一类类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为在面向对象的程序设计中,每一个对象都

3、属于某个特定的类,5,2.1 面向对象的程序设计方法概述(续)类5,2.1 面向对象的程序设计方法概述(续),结构化程序设计通常由若干个程序模块组成,每个程序模块都可以是子程序或函数数据和功能分离,代码难于维护和复用面向对象程序设计基本组成单位是类程序在运行时由类生成对象,对象是面向对象程序的核心对象之间通过发送消息进行通信,互相协作完成相应功能,6,2.1 面向对象的程序设计方法概述(续)结构化程序设计6,2.1.1 抽象,计算机软件开发中所使用的抽象有过程抽象数据抽象,7,2.1.1 抽象计算机软件开发中所使用的抽象有7,2.1.1 抽象(续),数据抽象将需要处理的数据和这些数据上的操作结

4、合在一起,抽象成不同的抽象数据类型每个抽象数据类型既包含了数据,也包含了针对这些数据的操作相对于过程抽象,数据抽象是更为合理的抽象方法,8,2.1.1 抽象(续)数据抽象8,2.1.1 抽象(续),例:钟表数据(属性)int Hour; int Minute; int Second;方法(行为)SetTime(); ShowTime();,9,2.1.1 抽象(续)例:9,2.1.1 抽象(续),例:人数据(属性)Char name; char gender; int age; int id;方法(行为)生物行为Eat(), Sleep(),社会行为Work(), Study(),10,2.1

5、.1 抽象(续)例:10,2.1.2 封装,封装是一种信息隐蔽技术利用抽象数据类型将数据和基于数据的操作封装在一起用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象,11,2.1.2 封装封装11,2.1.2 封装(续),封装的定义清楚的边界所有对象的内部信息被限定在这个边界内接口对象向外界提供的方法,外界可以通过这些方法与对象进行交互受保护的内部实现功能的实现细节,不能从类外访问。,12,2.1.2 封装(续)封装的定义12,2.1.2 封装(续),封装的意义在面向对象的程序设

6、计中,类封装了数据及对数据的操作,是程序中的最小模块禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,这使得模块之间的偶合度大大降低保证了模块具有较好的独立性,程序维护和修改较为容易,13,2.1.2 封装(续)封装的意义13,2.1.3 继承,继承是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)在继承过程中派生类继承了基类的特性,包括方法和实例变量派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量,14,2.1.3 继承继承14,2.1.

7、3 继承(续),单继承任何一个派生类都只有单一的直接父类类层次结构为树状结构多继承一个类可以有一个以上的直接父类类层次结构为网状结构,设计及实现比较复杂Java语言仅支持单继承,15,2.1.3 继承(续)单继承15,2.1.4 多态,多态一个程序中同名的不同方法共存主要通过子类对父类方法的覆盖来实现不同类的对象可以响应同名的消息(方法) ,具体的实现方法却不同使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题,16,2.1.4 多态多态16,2.2 类与对象,类与对象在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)一个类是对一类

8、对象的描述。类是构造对象的模板对象是类的具体实例,17,2.2 类与对象类与对象17,2.2.1 类的声明,声明形式public abstract | final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化; 方法声明及方法体;,18,2.2.1 类的声明声明形式18,2.2.1 类的声明(续),关键字class表明其后声明的是一个类。extends如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后implements如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后,19,ubli

9、c abstract | final class 类名称 extends 父类名称 implements 接口名称列表 ,2.2.1 类的声明(续)关键字19public ab,2.2.1 类的声明(续),修饰符可以有多个,用来限定类的使用方式public 表明此类为公有类abstract 指明此类为抽象类final 指明此类为终结类 类声明体变量成员声明及初始化:可以有多个方法声明及方法体: 可以有多个,20,ublic abstract | final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化; 方法声明及方法体;,2.2.1

10、类的声明(续)修饰符20public ab,2.2.1 类的声明(续),例2_1:钟表类public class Clock / 成员变量 int hour ; int minute ; 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); ,21,2.2.1 类的声明(续)例2_1:钟表类21,2

11、.2.2 对象的声明与引用,变量和对象变量除了存储基本数据类型的数据,还能存储对象的引用,用来存储对象引用的变量称为引用变量类的对象也称为类的实例,22,2.2.2 对象的声明与引用变量和对象22,2.2.2 对象的声明与引用(续),对象的声明格式类名 变量名 例如Clock是已经声明的类名,则下面语句声明的变量aclock将用于存储该类对象的引用: Clock aclock; 声明一个引用变量时并没有对象生成,23,2.2.2 对象的声明与引用(续)对象的声明23,2.2.2 对象的声明与引用(续),对象的创建生成实例的格式:new () 例如: aclock=new Clock();其作用

12、是:在内存中为此对象分配内存空间返回对象的引用(reference ,相当于对象的存储地址)引用变量可以被赋以空值例如:aclock=null;,24,2.2.2 对象的声明与引用(续)对象的创建24,2.2.3 数据成员,数据成员表示Java类的状态声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)分为实例变量和类变量,25,2.2.3 数据成员数据成员25,2.2.3 数据成员(续),声明格式public | protected | private staticfinaltra

13、nsient volatile变量数据类型 变量名1=变量初值, 变量名2=变量初值, ;格式说明public、protected、private 为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量,26,2.2.3 数据成员(续)声明格式26,2.2.3 数据成员(续),实例变量没有static修饰的变量称为实例变量(Instance Variables)用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同可通过下面的表达式访问实例属性的值.,27,2.2.3 数据成员(续)实例变

14、量27,2.2.3 数据成员(续),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); ,28,例2_2:,声明一个表示圆的类,保存在文件Circle.java 中。然后编写测试类,保存在文件ShapeTester.java中,并与Circle.java放在相同的目录下。,2.2.3 数据成员

15、(续)class Circle 28,2.2.3 数据成员(续),编译后运行结果如下:Circle26b249radius =0解释之后的数值为x所指的对象的存储地址x的值及对象的状态如图,29,例2_2运行结果,2.2.3 数据成员(续)编译后运行结果如下:29例2_,2.2.3 数据成员(续),public class Rectangle double width = 10.128; double height = 5.734; public class ShapeTester public static void main(String args) Circle x; Rectangle

16、 y; x = new Circle(); y = new Rectangle(); System.out.println(x+ +y); ,30,例2_3:,声明一个表示矩形的类,保存在Rectangle.java中;编写测试类,保存在ShapeTester.java中,文件保存在相同的目录下,2.2.3 数据成员(续)public class Rect,2.2.3 数据成员(续),编译后运行结果如下:Circle82f0db Rectangle92d342解释Circle及Rectangle类对象的状态如图,31,例2_3运行结果,2.2.3 数据成员(续)编译后运行结果如下:31例2_3

17、运,2.2.3 数据成员(续),对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 + “, + y.width + “, + z.w

18、idth); ,32,例2_3修改,2.2.3 数据成员(续)对ShapeTester类进行修改,2.2.3 数据成员(续),编译后运行结果如下:50, 10.128, 68.94解释Circle及Rectangle类对象的状态如图,33,修改后运行结果,2.2.3 数据成员(续)编译后运行结果如下:33修改后,2.2.3 数据成员(续),地址簿程序一个人的地址通常包括以下信息:姓名,省份,城市,街道,门牌号,邮政编码,34,例2_4,2.2.3 数据成员(续)地址簿程序34例2_4,2.2.3 数据成员(续),public static void main(String args) Stri

19、ng 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; city1 = Beijing; province1 = “Beijing; postalCode1 = 100084; name2 = Li

20、Hong; gateNumber2 = 2; streetName2 = BeiNong; city2 = Beijing; province2 = Beijing; postalCode2 = 102206; /.do something interesting ,35,采用过程化的程序设计方法,使用简单变量存储,则存储两个人地址的代码如下:,2.2.3 数据成员(续)public static vo,2.2.3 数据成员(续),采用面向对象的程序设计方法,则需要首先声明Address类如下public class Address String name; int gateNumber; S

21、tring streetName; String city; String province; String postalCode; /方法成员略 ,36,2.2.3 数据成员(续)采用面向对象的程序设计方法,则需要,2.2.3 数据成员(续),主方法改写如下public static void main(String args) Address address1 = new Address(), address2 = new Address(); address1.name = “Zhang Li; address1.streetNumber = 15; address1.streetNam

22、e = “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.postalCode = “102206; /.do something i

23、nteresting ,37,2.2.3 数据成员(续)主方法改写如下37,2.2.3 数据成员(续),类变量也称为静态变量,声明时需加static修饰符不管类的对象有多少,类变量只存在一份,在整个类中只有一个值类初始化的同时就被赋值适用情况类中所有对象都相同的属性经常需要共享的数据系统中用到的一些常量值引用格式.,38,2.2.3 数据成员(续)类变量38,2.2.3 数据成员(续),对于一个圆类的所有对象,计算圆的面积时,都需用到的值,可在Circle类的声明中增加一个类属性PI。public class Circle static double PI = 3.14159265; int

24、radius; 当我们生成Circle类的实例时,在每一个实例中并没有存储PI的值,PI的值存储在类中。,39,例2_5:,2.2.3 数据成员(续)对于一个圆类的所有对象,计算圆的面,2.2.3 数据成员(续),对类变量进行测试public class ClassVariableTester 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.prin

25、tln(x.PI); System.out.println(Circle.PI); 测试结果3.141592653.141592653.143.14,40,例2_5:,2.2.3 数据成员(续)对类变量进行测试40例2_5:,2.2.3 数据成员(续),声明一个Point类,有两个私有变量保存点坐标,一个类变量保存已有点的个数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; poin

26、tCount+;,41,练习: Point.java,2.2.3 数据成员(续)声明一个Point类,有两个私有变,2.2.3 数据成员(续),Point类测试class ex2_4 public static void main(String args) Point p = new Point(1,1); System.out.println(p.pointCount); Point q = new Point(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount =Point.pointCount);

27、 System.out.println(Point.pointCount);,42,2.2.3 数据成员(续)Point类测试42,2.2.3 数据成员(续),Point类测试结果12true2,43,2.2.3 数据成员(续)Point类测试结果43,2.2.3 数据成员(续),final修饰符实例变量和类变量都可被声明为finalfinal实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化final类变量必须在声明的同时初始化,44,2.2.3 数据成员(续)final修饰符44,2.2.4 方法成员,方法成员定义类的行为一个对象能够做的事情我们能够从一个对象取得的信息可以

28、没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分分为实例方法和类方法,45,2.2.4 方法成员方法成员45,2.2.4 方法成员(续),声明格式public | protected | private static finalabstract native synchronized返回类型 方法名(参数列表) throws exceptionList方法体,46,2.2.4 方法成员(续)声明格式46,2.2.4 方法成员(续),格式说明方法修饰public、protected、private 为存取控制符static指明方法是一个类方法final指明方法是一个终结方法ab

29、stract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问,47,ublic | protected | private static finalabstract native synchronized 返回类型 方法名(参数列表) throws exceptionList 方法体,2.2.4 方法成员(续)格式说明47public | p,2.2.4 方法成员(续),格式说明(续)返回类型方法返回值的类型,可以是任意的Java数据类型当不需要返回值时,返回类型为void参数类型简单数据类型,引用类型(数组、类

30、或接口)可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数方法体方法的实现包括局部变量的声明以及所有合法的Java指令局部变量的作用域只在该方法内部throws exceptionList用来处理异常,48,2.2.4 方法成员(续)格式说明(续)48,2.2.4 方法成员(续),方法调用给对象发消息意味着调用对象的某个方法从对象中取得信息 修改对象的状态或进行某种操作 进行计算及取得结果等调用格式. (参数列表)称点操作符“.”前面的为消息的接收者(receiver)参数传递值传递:参数类型为基本数据类型时引用传递:参数类型为对象类型或数组时,49,2.2.4 方法成员(续)方法调

31、用49,2.2.4 方法成员(续),实例方法表示特定对象的行为声明时前面不加static修饰符使用时需要发送给一个类实例,50,2.2.4 方法成员(续) 实例方法50,2.2.4 方法成员(续),在Circle类中声明计算周长的方法 public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; 由于radius是实例变量,在程序运行时,Java会自动取当前对象的属性值也可将circumference方法体改为:return

32、 2 * PI * this.radius; 关键字this代表此方法的当前对象,51,例2_6:,2.2.4 方法成员(续)在Circle类中声明计算周长的方,2.2.4 方法成员(续),方法调用测试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 c

33、ircum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); System.out.println(Circle 2 has circumference + circum2); ,52,2.2.4 方法成员(续)方法调用测试52,2.2.4 方法成员(续),运行结果Circle 1 has circumference 314.159265Circle 2 has circumference 62.831853说明在执行c1.circumference()时,radius的值为c1的r

34、adius属性值;在执行c2.circumference()时,radius的值为c2的radius属性值,53,2.2.4 方法成员(续)运行结果53,2.2.4 方法成员(续),在Circle类及Rectangle类中声明计算面积的方法area(),54,public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; ,pu

35、blic class Rectangle double width; double height; public double area() return width * height; ,例2_7:,2.2.4 方法成员(续)在Circle类及Rectan,2.2.4 方法成员(续),测试类,对Circle类及Rectangle类的area()方法进行测试 public class AreaTester public static void main(String args) Circle c = new Circle(); c.radius = 50; Rectangle r = new

36、Rectangle(); r.width = 20; r.height = 30; System.out.println(Circle has area + c.area(); System.out.println(Rectangle has area + r.area(); ,55,例2_7:,2.2.4 方法成员(续)测试类,对Circle类及Rect,2.2.4 方法成员(续),例2_7运行结果Circle has area 7853.981625Rectangle has area 600.0说明不同的类中可以声明相同方法名的方法使用时,系统会根据对象的类型找到相应类的方法,56,2.

37、2.4 方法成员(续)例2_7运行结果56,2.2.4 方法成员(续),带参数的方法举例:在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 enlarge(int factor) radius = radius * factor; ,57,例2_8:,

38、2.2.4 方法成员(续)带参数的方法举例:在Cir,2.2.4 方法成员(续),例2_8测试类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.println(Circle 2 的周长: + c2.circumferen

39、ce(); c2.enlarge(4); System.out.println(Circle 2 扩大后的周长: + c2.circumference(); ,58,2.2.4 方法成员(续)例2_8测试类58,2.2.4 方法成员(续),例2_8运行结果Circle 1 的周长: 314.159265Circle 2 的周长: 62.831853Circle 2 扩大后的周长: 251.327412,59,2.2.4 方法成员(续)例2_8运行结果59,2.2.4 方法成员(续),以对象作为参数的方法举例:在Circle类中增加fitsInside方法判断一个圆能否在一个长方形内,需要以Re

40、ctangle类的对象作为参数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 (Rectangle r) return (2 * radius r.width) ,60,例2_9:,2.2.4 方法成员(续)以对象作为参数的方法举例:,2.2.4

41、 方法成员(续),例2_9测试类 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; System.out.println(Circle 1 fits inside Rectangle: + c1.fitsInside(r); System

42、.out.println(Circle 2 fits inside Rectangle: + c2.fitsInside(r); ,61,2.2.4 方法成员(续)例2_9测试类61,2.2.4 方法成员(续),例2_9运行结果Circle 1 fits inside Rectangle: trueCircle 2 fits inside Rectangle: false,62,2.2.4 方法成员(续)例2_9运行结果62,2.2.4 方法成员(续),类方法也称为静态方法,表示类中对象的共有行为声明时前面需加static修饰符不能被声明为抽象的类方法可以在不建立对象的情况下用类名直接调用,也

43、可用类实例调用,63,2.2.4 方法成员(续)类方法63,2.2.4 方法成员(续),将摄氏温度(centigrade)转换成华氏温度(fahrenheit)转换公式为 fahrenheit = centigrade * 9 / 5 + 32除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法转换方法centigradeToFahrenheit放在类Converter中public class Converter public static int centigradeToFahrenheit(int cent) return (cent * 9 / 5

44、 + 32); 方法调用Converter.centigradeToFahrenheit(40),64,例2_10:,2.2.4 方法成员(续)将摄氏温度(centigr,2.2.5 类的组织包的概念,包是一组类的集合一个包可以包含若干个类文件,还可包含若干个包包的作用将相关的源代码文件组织在一起类名的空间管理,利用包来划分名字空间,可以避免类名冲突提供包一级的封装及存取权限,65,2.2.5 类的组织包的概念包65,2.2.5 类的组织包的概念,包的命名Java中包名使用小写字母表示命名方式建议将机构的Internet域名反序,作为包名的前导若包名中有任何不可用于标识符的字符,用下划线替代若

45、包名中的任何部分与关键字冲突,后缀下划线若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线,66,2.2.5 类的组织包的概念包的命名66,2.2.5 类的组织包的概念(续),编译单元与类空间一个Java源代码文件称为一个编译单元,由三部分组成所属包的声明(省略,则属于默认包)import (引入)包的声明,用于导入外部的类类和接口的声明一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件利用包来划分名字空间,便可以避免类名冲突,67,2.2.5 类的组织包的概念(续)编译单元与

46、类空间67,2.2.5 类的组织包的概念(续),包的声明命名的包(Named Packages)例如: package Mypackage;默认包(未命名的包)不含有包声明的编译单元是默认包的一部分,68,2.2.5 类的组织包的概念(续)包的声明68,2.2.5 类的组织包的概念(续),包与目录Java使用文件系统来存储包和类包名就是文件夹名,即目录名目录名并不一定是包名用javac编译源程序时,如遇到当前目录(包)中没有声明的类,就会以环境变量classpath为相对查找路径,按照包名的结构来查找。因此,要指定搜寻包的路径,需设置环境变量classpath,69,2.2.5 类的组织包的概

47、念(续)包与目录69,2.2.5 类的组织包的概念(续),引入包 为了使用其它包中所提供的类,需要使用import语句引入所需要的类Java编译器为所有程序自动引入包java.lang.import格式 import package1.package2. (classname |*);其中package1.package2表明包的层次,它对应于文件目录classname则指明所要引入的类名如果要引入一个包中的所有类,则可以使用星号(*)来代替类名,70,2.2.5 类的组织包的概念(续)引入包 70,2.2.6 类的访问控制,类的访问控制类的访问控制只有public(公共类)及无修饰符(缺省类

48、)两种访问权限符与访问能力之间的关系如表,71,2.2.6 类的访问控制类的访问控制71类型无修饰publi,2.2.6 类成员的访问控制,类成员的访问控制公有(public)可以被其他任何对象访问(前提是对类成员所在的类有访问权限) 保护(protected)可被同一包及其子类的实例对象访问私有(private)只能被这个类本身访问,在类外不可见默认(default)仅允许同一个包内的访问;又被称为“包(package)访问权限”,72,2.2.6 类成员的访问控制类成员的访问控制72,2.2.6 类成员的访问控制(续),73,2.2.6 类成员的访问控制(续)类型private无修饰p,2

49、.2.6 类成员的访问控制(续),对例2-6中的Circle类声明进行修改,给实例变量加上private修饰符public class Circle static double PI = 3.14159265; private int radius; public double circumference() return 2 * PI * radius; ,74,例2_11:,2.2.6 类成员的访问控制(续)对例2-6中的C,2.2.6 类成员的访问控制(续),再编译CircumferenceTester.javapublic class CircumferenceTester publi

50、c 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); System.out.println(Circle 2 has circumference + circ

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号