今天被问了一个 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 中的封装性 - 应该尽量将信息隐藏。类成员的访问权限放的越开,日后对于该类成员的任何改变就越要谨慎,因为这个类成员可能被很多人使用。如何选择,应该充分考虑类成员的最终用途。
相关推荐
java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限 ...
java类、对象、成员 package、import、访问修饰控制符 接口和抽象类 细心总结,解惑上述所引起的一些困惑
文章目录前言特性中的继承访问控制符成员访问控制符private默认protectedpublic类的访问控制符非访问控制符static静态域静态方法finalfinal类final方法final字段和局部变量main()方法 你好,我是goldsun。 你有想法...
如何使用访问控制权限修饰符限制类、接口、成员变量和方法的访问范围 如何合理选择适当的访问控制权限修饰符来保护数据和封装代码 理解默认访问级别的含义和限制 阅读建议 在阅读本文档之前,您应该具备以下基础知识...
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中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程...
所有类成员的默认访问范围都是package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。 2)protected 受保护的 protected 关键字是可以应用于类、方法或字段(在类中...
获得需要的访问控制。 A .public B .no modifier C .protected D .private 【试题分析】Java 有4 种访问类型,分别为public 、protected 、default 和private 。其中public 变量 可以被所有的外部类访问,而...
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中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的 案例 定义一个Person类 ...
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中的...
面向对象2(成员变量与局部变量 常用系统类 包 访问控制符 String),6.面向对象3(封装 继承 多态),7.面向对象4(抽象类 接口 包装类),8.GUI编程--awt,9.GUI编程--计算器案例,10.GUI编程--Swing,11.集合,12.多线程,13....
4、不允许作为类及类成员的访问控制符的是( )。 A. public B. private C.static D. protected 5、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为...
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 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的...
掌握package(又称默认,友元)控制符,系统掌握4种访问控制符 第6章 面向对象(多态) 4课时 理解多态的概念,不关心具体细节,以抽象一般的思维方式考虑问题(同一接口,不同实现)。...
对类的成员可以设定访问权限 ,来限定 其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 1.8.2 对象 把类实例化,我们可以生成多个对象,这些对象通过消息传递来进行交互(消息 ...
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类的基本...