`
wxl24life
  • 浏览: 290734 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 类成员的访问控制符

    博客分类:
  • Java
阅读更多

今天被问了一个 Java 基础知识:Java 类成员的访问控制符(Access Modifier)有几种?这些访问控制符之间有何区别?

 

首先回答第一个问题。通常我们可以显示声明的访问控制符有三个:public, private 和 protected。但是,我们也会碰到另一种情况:在成员变量或者方法声明前面不加任何的访问控制符。通过这种方式声明的成员具有缺省访问控制(default access)属性。具有缺省访问属性的类成员的可访问性被限制在包(package)内,因而有人也称之为包可见访问控制。

 

然后,关于四种访问控制属性的对比,可以直接引用 SO 上的一张非常清晰的对比图表:

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ✔    |    ✔    |    ✔     |   ✔
————————————+———————+—————————+——————————+———————
protected   |  ✔    |    ✔    |    ✔     |   ✘
————————————+———————+—————————+——————————+———————
no modifier |  ✔    |    ✔    |    ✘     |   ✘
————————————+———————+—————————+——————————+———————
private     |  ✔    |    ✘    |    ✘     |   ✘

 

这张图表可以这样解读(以 protected 为例):

proctected 访问控制符所修饰的类成员在声明该成员的类类所在的包中的所有其他类以及该类的所有子类中是可见的,而对除此之外的其他类是不可见的。

 

需要注意的一点是,缺省访问控制的类成员只是包内可见,如果其子类也同一个包内,那么也是子类可见的。但是,由于对包外声明的子类是不可见的,所以有上图标中的第4行第4列的✘。

 

另外,值得领会的另一个问题是:在实际编程中应该如何选择使用哪一种访问控制符?SO上得票数第二的回答也是值得读一下的。总的来说,访问控制符设计的初衷是针对 OO 中的封装性 - 应该尽量将信息隐藏。类成员的访问权限放的越开,日后对于该类成员的任何改变就越要谨慎,因为这个类成员可能被很多人使用。如何选择,应该充分考虑类成员的最终用途。

 

0
0
分享到:
评论

相关推荐

    【后端】java基础(5.3)java高级基础之java的修饰符——访问控制符

    java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限 ...

    java类、对象、成员、package、import、访问修饰控制符总结

    java类、对象、成员 package、import、访问修饰控制符 接口和抽象类 细心总结,解惑上述所引起的一些困惑

    剖析Java中的访问/非访问控制符以及神奇的main函数

    文章目录前言特性中的继承访问控制符成员访问控制符private默认protectedpublic类的访问控制符非访问控制符static静态域静态方法finalfinal类final方法final字段和局部变量main()方法 你好,我是goldsun。 你有想法...

    Java零基础-访问控制权限修饰符.md

    如何使用访问控制权限修饰符限制类、接口、成员变量和方法的访问范围 如何合理选择适当的访问控制权限修饰符来保护数据和封装代码 理解默认访问级别的含义和限制 阅读建议 在阅读本文档之前,您应该具备以下基础知识...

    JAVA 面向对象程序设计第2章 面向对象进阶.pptx

    2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.3 学生实践练习;2.3.3 学生实践练习;2.4 static关键字;2.4 static关键字;2.4.1 静态成员变量;...

    【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符

    上章讲了访问控制符,这章开始讲非访问控制符。 java中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程...

    Java关键字及其作用

    所有类成员的默认访问范围都是package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。 2)protected 受保护的 protected 关键字是可以应用于类、方法或字段(在类中...

    java 面试题

    获得需要的访问控制。 A .public B .no modifier C .protected D .private 【试题分析】Java 有4 种访问类型,分别为public 、protected 、default 和private 。其中public 变量 可以被所有的外部类访问,而...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Scala进阶_成员访问修饰符

    Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的 案例 定义一个Person类 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Java基础笔记知识点.rar

    面向对象2(成员变量与局部变量 常用系统类 包 访问控制符 String),6.面向对象3(封装 继承 多态),7.面向对象4(抽象类 接口 包装类),8.GUI编程--awt,9.GUI编程--计算器案例,10.GUI编程--Swing,11.集合,12.多线程,13....

    广东工业大学Java期末考试卷

    4、不允许作为类及类成员的访问控制符的是( )。 A. public B. private C.static D. protected 5、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为...

    疯狂JAVA讲义

    5.4.2 使用访问控制符 132 5.4.3 package和import 135 5.4.4 Java的常用包 140 5.5 深入构造器 140 5.5.1 使用构造器执行初始化 141 学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java...

    scala 访问修饰符及作用域

    Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的...

    AIC的Java课程1-6章

     掌握package(又称默认,友元)控制符,系统掌握4种访问控制符 第6章 面向对象(多态) 4课时  理解多态的概念,不关心具体细节,以抽象一般的思维方式考虑问题(同一接口,不同实现)。...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对类的成员可以设定访问权限 ,来限定 其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 1.8.2 对象 把类实例化,我们可以生成多个对象,这些对象通过消息传递来进行交互(消息 ...

    Java入门教程(微学苑)-part1

    3.11 如何使用访问控制符 47 3.12 Java变量的作用域 48 3.13 Java this关键字详解 49 3.14 使用this区分同名变量 49 3.15 作为方法名来初始化对象 50 3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本...

Global site tag (gtag.js) - Google Analytics