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类之前 ...
随机推荐
- UVALive - 3942:Remember the Word
发现字典里面的单词数目多且长度短,可以用字典树保存 f[i]表示s[i~L]的分割方式,则有f[i]=∑f[i+len(word[j])] 其中word[j]为s[i~L]的前缀 注意字典树又叫前 ...
- 洛谷mNOIP模拟赛Day1-斐波那契
题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...
- 【Uva 11280 飞到弗雷德里顿】
·你可以尽情地坐飞机,但停留次数遭到限制. ·英文题,述大意: 给出一张有向图,起点是输入的第一个城市,终点是输入的最后一个城市.给出q个询问,每个询问含一个t,表示 #include&l ...
- 5分钟快速打造WebRTC视频聊天
百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本信息都发不出去,更别说视频了.于是自己动手. 想 ...
- wpf中静态资源和动态资源的区别
静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了. 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源.
- Requests库介绍
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- Mianbot:基于向量匹配的情境式聊天机器人
Mianbot是采用样板与检索式模型搭建的聊天机器人,目前有两种产生回覆的方式,专案仍在开发中:) 其一(左图)是以词向量进行短语分类,针对分类的目标模组实现特征抽取与记忆回覆功能,以进行多轮对话,匹 ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- ionic 禁用 手势 滑动返回
$ionicConfigProvider.views.swipeBackEnabled(false); 在 应用的 config里面 配置下 上面的那句话 就OK了.
- 吴恩达深度学习第2课第2周编程作业 的坑(Optimization Methods)
我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...