Java 访问控制规则简介
1. 概述
- 老生常谈的内容
- 巩固一下自己 要摇摇欲坠的基础
- 内容确实不怎么高级...
2. 常规解释
1. 概述
- 简单说下什么情况
- 在单纯考虑 public, protected, 以及 private 的情况下
- 先暂时不要受到其他 修饰词 的干扰
- 比如
- public int var01;
- protected int var02;
- int var03;
- private int var04;
2. 解释
│ Class │ Package │ Subclass │ Subclass │ World
│ │ │(same pkg)│(diff pkg)│
────────────┼───────┼─────────┼──────────┼──────────┼────────
public │ + │ + │ + │ + │ +
────────────┼───────┼─────────┼──────────┼──────────┼────────
protected │ + │ + │ + │ + │
────────────┼───────┼─────────┼──────────┼──────────┼────────
no modifier │ + │ + │ + │ │
────────────┼───────┼─────────┼──────────┼──────────┼────────
private │ + │ │ │ │
1. 横坐标
- 这个暂时不解释
2. 结论
- public
- 在哪里都可被访问, 这个毋庸置疑
- protected
- 本类 和 同包 可以访问
- 子类 (包内 和 包外) 都可以访问
- no modifier
- 仅在 同包 的类之间, 可以互相访问
- 包以外 的 所有类, 都不可以访问
- private
- 只有本类可以访问
3. 其他
- 关于 subclass
- 对于 subclass, 我有疑问
- 是否包含 间接的子类
- 验证策略
- 有一个类 A1, 有变量 protected p
- 在另外的包里, 创建一个 subclass A2, 再创建这个类的 subclass A3
- 尝试在 A3 的 main 方法里访问 protected p
- 结论
- A3 的 main 方法里, 可以访问 protected p
- 表中的 subclass(diff pkg), 包含了 间接子类
- 对于 subclass, 我有疑问
- 关于 父类
- 对于 包外的父类, 我有疑问
- world 里, 是否包含 包外的父类
- 验证策略
- 有类 A1
- 另一个包里, 有 subclass A2, A2 有 protected 变量 p
- 尝试在 A1 的 main 方法里创建 A2 实例, 并尝试访问 p
- 结论
- 访问失败
- 包外的父类, 包含在 world 中
- 对于 包外的父类, 我有疑问
4. 其他
1. 其他问题
- java 的变量, 方法, 类, 接口 有很多的修饰词
- 访问控制相关, 已经提到
- static 会对 变量, 方法, 代码块, 生效
- final 会对 变量, 方法, 类生效
- abstract 会对 变量, 方法生效
- 然后这些东西, 排列组合之后, 又会让人陷入沉思
- 当然, 以上很可能会漏掉一些
2. 面试碰到了一个问题
- 问题
- 一个 private static 的变量
- 能否在该类的 main 方法中, 通过一个该类的是实例访问
- 我说
- 不能, 那是相当的自信
- 解释, 倒也没解释出来
- 凭感觉, 我是这么解释的
- 这个变量是 private
- 只能在 这个变量的方法里执行
- 但是这个 main 方法, 并不是那个对象的 main 方法, 所以不能取到 private 变量
- 如果要取, 只能在该类的其他方法里取
- 结论
- 当然是我错了
- 我自己尝试了一下, 是可以取到的
- 面试中我的思路不对, 并且对 访问控制的认识, 并不充分
- static 大概有这些认识, 但愿没错, 日后会确认
- static 变量, 是类独一份
- static 变量, 可以通过 实例 或者 类本身 来调用
- static 方法, 里面没有 this对象, 所以无法直接访问 实例变量
- static 变量初始化的时机, 通常在 类 装载后, 就会执行
- static 代码块, 在 初始化 的时候, 执行
- static 大概有这些认识, 但愿没错, 日后会确认
- 如果重新分析, 思路大概会是这样
- protected 关键字, main方法 确定在 作用域内
- static 关键字, 可以由 变量实例 或者 类对象 直接调用
- 所以没有问题, 可以调用
- 后续
- 首先是了解哪些关键字相关的内容
- 单独作用
- 配合作用
- java 的类加载机制
- 这个说起来要深不深要浅不浅的, 早晚得看
- 首先是了解哪些关键字相关的内容
ps
- ref
Java 访问控制规则简介的更多相关文章
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- java.math包简介
java.math包提供了java中的数学类 包括基本的浮点库.复杂运算以及任意精度的数据运算 '可以看得到,主要包括三个类一个枚举 BigDecimal和BigInteger接下来会详细介绍 先 ...
- [java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]> [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...
- Java Servlet 技术简介
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
- Java基础类库简介
Java基础类库简介 一.常用的基础类库:11个jar(Java Archive,Java归档)包 作为java语言使用者,我们可以感受到java语言带来的优势(平台无关.面向对象.多线程.高效易扩展 ...
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
- 《Java编程思想第四版》附录 C Java 编程规则
附录 C Java 编程规则 本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符 ...
- java 红包规则
java 红包规则 拼手气红包: 规则:最大金额:全部金额/个数*倍数 最小金额:0.01 最后一个红包是全部金额-领取金额 随机分配 package com.utils; import java.m ...
- Emmet(Zen Coding)语法规则简介
———Emmet(Zen Coding)语法规则简介——— [Zen Coding可谓快速开发HTML和CSS的利器,主要采用仿css类选择器方式编写代码,以下是该利器的基本语法规则和代码示例] 基础 ...
随机推荐
- recycle bin tip
if you have a question about recycle bin that can look the follow link; http://www.dba-oracle.com/t_ ...
- Strsafe.h:更安全的C语言字符串处理函数
原文出处:Strsafe.h: Safer String Handling in C 作者:Michael Howard 编译:王凌峰 在微软公司举行的Microsoft Windows Securi ...
- FOR YOU
给你 作者:余秀华 一家朴素的茶馆, 面前目光朴素的你皆为我喜欢 你的胡子,昨夜辗转的面色让我忧伤 我想带给你的,一路已经丢失得差不多 除了窗外凋谢的春色 遇见你以后,你不停地爱别人,一个接一个 我没 ...
- codeforces 407C Curious Array
codeforces 407C Curious Array UPD: 我觉得这个做法比较好理解啊 参考题解:https://www.cnblogs.com/ChopsticksAN/p/4908377 ...
- Java自学之路(新手一定要看)
Java自学之路(新手一定要看) 转自尚学堂 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游 ...
- cogs 2355. [HZOI 2015] 有标号的DAG计数 II
题目分析 来自2013年王迪的论文<浅谈容斥原理> 设\(f_{n,S}\)表示n个节点,入度为0的点集恰好为S的方案数. 设\(g_{n,S}\)表示n个节点,入度为0的点集至少为S的方 ...
- ubuntu卸载virtualbox
本想在ubuntu下virtualbox,可惜出错了,需要卸载后再安装,只能百度拼凑后再安装: 1.首先是执行删除命令:sudo apt-get remove virtualbox*( 这样就不用去查 ...
- 创建 JavaScript 对象
http://www.w3school.com.cn/js/js_objects.asp 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不 ...
- 4、Android-数据存储方案(文件存储/SharedPreferences)
简介: 任何一个应用程序都需要和数据进行交互 对于软件来说微博.QQ等都需要关系的是数据 没有数据的应用程序是一个没有灵魂的软件 而且还没有实际的用途 可以认为是单机 4.1.持久化技术的简介 数据持 ...
- Kali-linux绕过Utilman登录
Utilman是Windows辅助工具管理器.该程序是存放在Windows系统文件中最重要的文件,通常情况下是在安装系统过程中自动创建的,对于系统正常运行来说至关重要.在Windows下,使用Wind ...