Java的访问权限详解(3+1)public private protected default
Java使用三个关键字在类的内部设定访问权限:public、private、protected。这些访问指定词(access specifier)决定了紧跟其后被定义的成员(方法或属性)可以被谁使用。public表示紧随其后的元素对任何人都是可用的,而private这个关键字表示除类型创建者(类内部访问)和类型的内部方法之外的任何人都不能访问的元素。private就像你与客户端程序员之间的一堵砖墙,如果有人试图访问private成员,就会在编译时得到错误信息。
Java还有一种默认的访问权限,当没有使用任何访问指定词时,它将发挥作用。这种权限通常被称为“包访问权限”,因为在这种权限下,类可以访问在同一个包中的其他类的成员,但是在包之外,这些成员如同指定了private一样。
protected关键字与默认权限作用相当,差别仅在于在包外继承的类可以访问protected成员,但是不能访问默认权限成员。
(以上是看了Java编程思想中文第四版总结的,英文版没看过。但是关于访问权限的解释有部分是不对的。
由此看来,不论看什么书,都要抱着怀疑的态度,看后实践才是硬道理。)
例子:
1.测试类内访问:
package synnex.demo.access; public class AccessDemo { public String name; private int age; protected String address; String phoneNumber; public AccessDemo() { } /** * @param name * @param age * @param address * @param phoneNumber */ public AccessDemo(String name, int age, String address, String phoneNumber) { //构造函数属于类的内部方法,可以访问任何权限的成员。 super(); this.name = name; this.age = age; this.address = address; this.phoneNumber = phoneNumber; } public static void main(String[] args) { //main方法在类型创建者内部,故也可以访问任何权限的成员。 AccessDemo demo = new AccessDemo(); demo.name = "name"; demo.age = 26; demo.address = "beijing"; demo.phoneNumber = "13520968888"; } }
2.包内的类访问:
package synnex.demo.access; public class PackageAccessDemo { public PackageAccessDemo() { } public static void main(String[] args) { AccessDemo demo = new AccessDemo(); //在同一个包中的类,除了访问不到private类的成员,其他的都可以直接访问到。 demo.name = "namepackage"; // demo.age = 26; demo.address = "shanghai"; demo.phoneNumber = "222222222222"; } }
3.包外非继承的类访问:
package synnex.demo; import synnex.demo.access.AccessDemo; public class AccessOutpackageDemo2 { public AccessOutpackageDemo2() { } public static void main(String[] args) { AccessDemo demo = new AccessDemo(); //对于包外非继承关系的类,只有public权限的成员可以直接访问到。 demo.name = "out package no extends"; // demo.age = 26; // demo.address = "nanjing"; // demo.phoneNumber = "13520968888"; } }
4.包外继承的类访问:
package synnex.demo; import synnex.demo.access.AccessDemo; public class AccessOutpackageDemo1 extends AccessDemo { public AccessOutpackageDemo1() { } public static void main(String[] args) { AccessOutpackageDemo1 demo = new AccessOutpackageDemo1(); //对于包外继承关系的类,public和protected权限的成员可以直接访问到。 demo.name = "out package extends"; // demo.age = 26; demo.address = "nanjing"; // demo.phoneNumber = "13520968888"; } }
总结如下图:
访问修饰符 |
同一个类 |
同包 |
不同包,子类 |
不同包,非子类 |
private |
√ |
|||
protected |
√ |
√ |
√ |
|
public |
√ |
√ |
√ |
√ |
默认 |
√ |
√ |
Java的访问权限详解(3+1)public private protected default的更多相关文章
- 访问权限系列一(public/private/protected/default):成员变量
通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...
- C++之类成员的访问权限详解(一)
概念解析 众所周知,面向对象编程语言的特征之一就是封装,不同编程语言对于封装提供的实现有所不同,但原理大体上是相同的.C++提供了三种不同程度的访问权限来实现,主要是通过public.private. ...
- scala 访问权限详解
private/protected [包名/类名/this] 即可指定变量的作用域.(this代表只有当前实例(即对象)可以访问) 伴生类和伴生对象中的成员可以相互访问. class PackageO ...
- java中public private protected default的区别
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- 访问修饰符 public private protected default
- 【Linux学习】Linux下用户组、文件权限详解
原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解
Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
随机推荐
- [USACO14DEC]后卫马克Guard Mark
题目描述 FJ将飞盘抛向身高为H(1 <= H <= 1,000,000,000)的Mark,但是Mark 被N(2 <= N <= 20)头牛包围.牛们可以叠成一个牛塔,如果 ...
- 绝世好题bzoj4300
Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). Input 输入文件共2行. 第一行包括一个整数 ...
- ●poj 1474 Video Surveillance
题链: http://poj.org/problem?id=1474 题解: 计算几何,半平面交 半平面交裸题,快要恶心死我啦... (了无数次之后,一怒之下把onleft改为onright,然后还加 ...
- [LSGDOJ 1505]售货员的难题 状压DP
题目描述 某 乡有n个村庄(1<n<15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村 到B村与B村到A村的路大多不同.为了提高 ...
- 2015 多校联赛 ——HDU5410(dp)
Sample Input 1 100 2 10 2 1 20 1 1 Sample Output 21 题意:共有m元钱和n种东西,求每种单价p,而且你买x个该种物品可以得到Ax+B个,求m元钱最 ...
- bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5541 Solved: 2228[Submit][Sta ...
- python 中range numpy.arange 和 numpy.linspace 的区别
1.返回值不同 range返回一个range对象,numpy.arange和numpy.linspace返回一个数组. 2.np.arange的步长可以为小数,但range的步长只能是整数. 与Pyt ...
- Java Native方法
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...
- java反射 概念
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
- requestAnimationFrame之缓动的应用
之前需要使用的定时器的时,立马想到的是setInterval(),用着用着就成为习惯,并没有遇到什么不妥之处.习惯性的操作往往容易让一个人拒绝尝试一些其他的方法.现在的方法用得好好的,没事干啥找其他法 ...