类中成员的访问权限_Java语言程

4.7.2 类中成员的访问权限

Java将类中成员(成员变量和成员方法)的访问权限(可见性)划分为4种情况,按照访问权限的范围大小从小到大列出如下。

·私有(private)成员:仅在本类内中的代码可访问它。

·默认(无修饰符)成员:在同一包内中的代码可访问它。

·保护(protected)成员:在同一包内及其子类(不同包)中的代码可访问它。

·公共(public)成员:在所有包内中的代码可访问它。

1.私有(private)成员

类中修饰为private的实例变量和实例方法,只能被这个类本身的方法访问,在类外不能通过变量名或方法名访问它。

类中的实例变量一般修饰为private,并通过public修饰的set方法和get方法设定或读取private实例变量的值。

类中的一些辅助方法,因为不属于该类向外界提供的服务,因此修饰为private。

【例4-25】 类Circle中私有成员的访问。

如果一个类的构造方法修饰为private,表明其他类不能通过这个构造方法生成该类的实例。如果想生成该类的实例,可定义一个静态方法,在该静态方法中,创造该类对象(即引用这个私有构造方法),并返回对象的引用值。这样,就能通过引用这个静态方法间接地生成一个实例。

【例4-26】 类Circle中私有构造方法的访问。

2.默认(无修饰符)成员

例4-4和例4-23的类Circle中的实例变量radius和实例方法getArea()、getPerimeter()前都没有修饰符,而类Circle和类Ex4_4在一个包中。因此,在类Ex4_4中可以引用实例变量radius和实例方法getArea()、getPerimeter()。

3.保护(protected)成员

类中修饰为protected的成员可以被这个类本身、同一个包中的其他的类以及其他包中的子类访问。(www.guayunfan.com)

如果一个类有子类,而不管子类是否与自己在同一个包中,都想让子类能够访问自己的某些成员,就应该将这些成员修饰为protected。

【例4-27】 类Circle中保护成员的访问。

程序运行结果:

分析与思考:(1)类Circle在xiyou.chapter04包中,类Ball和类Ex4_27在xiyou包中,且类Ball是类Circle的子类。类Circle中的getPerimeter()方法没有修饰符,而访问该方法的代码在类Ball中。由于类Circle和类Ball不在同一个包中,没有修饰符的getPerimeter()方法不能被访问。

(2)类Circle中的成员变量radius和成员方法getArea()被protected修饰,而访问该变量、方法的代码位置是在与Circle类不同包的子类Ball中。访问代码obj是Circle类型,不是当前子类Ball,因此无法访问。而访问代码object是Ball类型,是当前子类Ball,因此可以访问。

(3)总之,当从其他包的子类访问protected成员时,访问该成员的引用类型必须是当前子类,或者是当前子类的子类。

4.公共(public)成员

类中声明为public的成员,所有包内中的代码都可访问它。例4-24的Circle类在xiyou.zxl.javabook.chapter04包中,内容是:

由于类Circle中的成员radius、getArea()和getPerimeter()都被修饰为public,因此,任何包中的类都能引用它们。如果将它们修饰为非public,由于xiyou.zxl.javabook包中类Ex4 _4与xiyou.zxl.javabook.chapter04包中类Circle中不在同一个包中,类Ex4_4不是类Circle的子类,因此,类Ex4_4无法引用它们。

注意:要引用一个类的成员,首先要能够引用该类,然后才有可能引用其成员。类中成员的访问权限也与类的访问权限有关。例如,类Circle中成员的访问权限为public,而类Circle的访问权限为没有被public修饰,则类Circle只能在本包内被引用,因此,类Circle中的成员也只能在本包内被访问。

小结 编译系统主要从两方面来判断访问的合法性:一是被访问实体的访问级别,即被何种访问修饰符修饰(或者没有用修饰符修饰);二是访问代码出现的位置,即访问位置。例如,类的访问级别有两种,即用public修饰和没用public修饰;访问位置也可分两种情况,即被访问类所在的包和其他包,即访问的代码与被访问的类在同一个包或不在同一个包。用public修饰的类既可以在类所在的包中被访问,也可以在其他包中被访问;没有用public修饰的类只能在该类所在的包内被访问。

类成员的访问级别共有4种,按照受限制程度从强至弱依次是:私有(private)、默认(无修饰符)、保护(protected)和公共(public)。访问类成员的代码位置同样有4种情况:被访问成员所在类、被访问成员所在包中的类、被访问成员所在类在其他包中的子类、被访问成员所在类在其他包中的非子类,如表4-1所示。

表4-1 类成员的访问级别

java 类中有几种访问权限_类中成员的访问权限_Java语言程相关推荐

  1. java定义说话方法_类定义的基本形式_Java语言程

    类定义的基本形式_Java语言程 4.2.1 类定义的基本形式 前面一节我们已经了解了类和对象的概念,然而在实际编程过程中,该如何定义一个类以及类中的对象呢? 在Java语言中,用户自己可以定义一个类 ...

  2. java中对象清空值_对象的引用和清除_Java语言程

    对象的引用和清除_Java语言程 4.3.3 对象的引用和清除 在创建了类的对象后,就可以使用对象.即对象使用的原则是"先创建后使用". 使用对象的方法是:通过运算符". ...

  3. Java中包装类型的作用_基本类型的包装类_Java语言程

    基本类型的包装类_Java语言程 6.3 基本类型的包装类 在Java中,每一种基本数据类型都有一个相应的包装类,这些类都在java.lang包中.8种基本数据类型所对应的包装类是:byte(Byte ...

  4. java穷举法解方程_枚举法(穷举法)_Java语言程

    枚举法(穷举法)_Java语言程 3.5.1 枚举法(穷举法) 枚举法就是把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出. [例3-20] 百元买百鸡:用一百元钱买一百只鸡.已知公鸡5元/ ...

  5. java枚举类构造方法默认是,枚举类型的构造方法_Java语言程

    枚举类型的构造方法_Java语言程 6.6.4 枚举类型的构造方法 枚举类型既然是类,那么就可以有构造方法.只不过只能是私有的(private),不能有公有的(public)构造方法,这是为了避免直接 ...

  6. 域文件服务器共享设置,域中的文件服务器共享权限设置域中的文件服务器共享权限设置.pdf...

    域中的文件服务器共享权限设置域中的文件服务器共享权限设置 先建立public 共享文件夹,将其文件夹共享,其权限设置为下图 确定之后.接著设置安全如下图 点击高级..进入高级安全设置.如下图 取消上图 ...

  7. java 共享内存获取写权限_跨进程访问共享内存的权限问题

    问:我在服务器上用 CreateFileMapping 创建了一段共享内存.让这个exe始终在服务器上跑. 同时,别的用户在客户端用IE访问服务器,将要查询的数据通过C#制作的网页提交上来,服务器得到 ...

  8. 设置字段权限_命令行快速提示:权限进阶

    (给Linux爱好者加星标,提升Linux技能) 编译:linux中国- Xingyu.Wang,作者:Paul W. Frields 前一篇文章介绍了 Fedora 系统上有关文件权限的一些基础知识 ...

  9. 软件获取手机的ime权限_你手机上软件的权限请求,都要同意吗,会不会泄漏你的隐私?...

    生活中,在你使用各种手机软件的时候,不知道你有没有注意到,在软件第一次安装打开的时候,有大多数软件会弹出一个权限请求的弹框,显示出应用要请求获取什么权限以及使用这些权限的一些情况说明.我相信大多数人可 ...

最新文章

  1. 2.9 学习率衰减-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. iOS小知识点(非UI部分)
  3. CS229 1 .线性回归与特征归一化(feature scaling)
  4. 使用集合映射和关联关系映射_使用R进行基因ID映射
  5. 玩玩IronPython
  6. Activity之间传递参数
  7. 微软收购PhoneFactor以提高多因素身份认证应用程序的安全性
  8. 获取三角形外接圆的圆心坐标、半径
  9. 4.14 在数字的左侧进行补零 [原创Excel教程]
  10. 云计算在我们日常生活中,主要有哪些应用
  11. 1995-2013年RSA大会历届主题回顾
  12. 视频剪辑软件调研分析-iMovie、Final Cut Pro、视频剪辑大师
  13. 中国计算机网络设备制造业总体趋势免费版,致自己的心灵鸡汤说说,句句经典,引人深思!...
  14. 机器学习笔记~HDF5 library version mismatched error与ImportError: 'save_model' requires h5py问题解决
  15. 【Python问题解决】---- ERROR: Could not install packages due to an OSError: [WinError 2] 系统找不到指定的文件。
  16. VGA原理详解与verilog实现RGB888彩条(二)
  17. 基于android的汽车租赁出租车打车洗车app
  18. openwrt/wr703n INode H3C 中山大学校园网 无线路由配置操作
  19. Delphi/C#之父Anders Hejlsberg
  20. idea中使用log4j(打开、关闭日志方法)

热门文章

  1. 怎样把Audio cd光盘里的歌曲文件复制到硬盘里
  2. Unity开发VR——Oculus Rif_将Oculus接入Unity
  3. 在银河麒麟上编译运行firefox
  4. Java面向对象回顾
  5. MySQL中索引的使用方法
  6. RX-Explorer 使用体验:一款实用的 Windows 资源管理器
  7. 带你一步一步深入Handler源码,看这一篇就够了!
  8. 喜讯 | 音视频云服务商拍乐云荣登「2021值得关注的中国教育公司」榜单
  9. 【论文笔记 2】CNN经典入门STRIVING FOR SIMPLICITY: THE ALL CONVOLUTIONAL NET
  10. 使用BHO定制你的IE浏览器