【Thinking in Java, 4e】访问权限控制
【包:库单元】
编译单元的概念。
一个.java文件就是一个编译单元,一个编译单元只能有一个public类,编译单元中的非public类一般是用于为public类提供支持的,这些类在包外不可见。
import语句。
当编译器碰到import语句的时候,就开始在CLASSPATH所指定的目录中查找对应的package。
【Java访问权限修饰词】
包访问权限
1、当某个类没有添加访问修饰符的时候,这个类默认在包内可见(可见的含义就是可以随意使用这个类来创建对象),但对于包外的类而言,这个类是private的(不可见的)。
2、取得某个类的信任的方式:将该类改成public、将该类与想使用该类的类放在同一个包内、继承自这个类(前提是这个类不是private)
public:接口访问权限
1、如果一个方法没有加上访问修饰符号,那么同样是默认包内可见,这意味其他类(非本包的类)即便创建了这个类的对象(这个类假设是public的),也无法通过这个对象调用这个方法。
2、即使没有明确写出“package+包名”,同一目录下的类仍属于同一个包!
private:你无法访问
1、默认包访问权限通常提供了足够充足的隐藏措施。不要不加考虑的将类声明为public!!!
例如,用如下结构创建类:

其中package com.xkfx中的A是具有默认包访问权限的,而B是public的:


可以看到,“同胞”类B是可以访问A的,但是如果尝试在packageTest(包外类)中尝试new B:

结果是无法访问的,所以,不要不加考虑的将类声明为public!!!
protect:继承访问权限
1、方法没有添加访问修饰符也默认设置为“包访问权限”,即便所属类是public的。
2、包访问权限可以理解为:同包可见。
3、一旦某个类的属性设置为private,即使是子类也无法直接访问(“super.属性”等一切途径都不可访问)。子类继承父类,子类具备private属性,但是却无法直接访问(可以通过父类的public方法间接访问),然而如果将父类的private属性修改为protect,那么子类就可以通过“.属性”直接访问这个属性。protect的缺点就是一旦设置为protect,除了子类同包类也可随便new 该类,然后通过“.属性”访问该属性。
【接口和实现】
将public(接口)放在前面,private放在后面会让代码好读一些。
【类的访问权限】
1、类的访问权限仅有两种 选择 :包访问权限 或 public。
2、可以通过将构造器指定为private来阻止直接创建类的实例,然后通过静态方法调用这个构造器。(这对限制数量,记录数量大有裨益)
3、单例(singleton)将对象作为一个static private成员,通过静态方法返回它的引用,这样创建的对象有且仅有一个。(例如可以通过这样创建管理一个固定数组)
4、相同目录下所有不具备package声明的文件,都被视为该目录下默认包的一部分。
【小结】
访问权限的设定主要从类创建者和类使用者的角度考虑(常常需要扮演两种角色),哪些东西是需要暴露给类使用者的?
【Thinking in Java, 4e】访问权限控制的更多相关文章
- Java基础—访问权限控制
Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...
- 【Java_基础】Java的访问权限控制
1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...
- JAVA笔记 -- 访问权限控制
访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...
- java 的访问权限控制
package test06; public class PermissionModel { private int age; public String name; public int getAg ...
- JAVA访问权限控制[zhuan]
Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...
- 论Java访问权限控制的重要性
人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
- Java成员的访问权限控制
Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
- 浅析Java中的访问权限控制
浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...
随机推荐
- Java Web项目--使用JSP生成一个页面
我们使用了servlet生成了一个网页,但是可以看到使用servlet生成网页必须将网页的内容全部嵌入到Java代码当中,不是很方便.所以有没有什么办法是将Java代码嵌入到html代码中,而不是像s ...
- 【黑金原创教程】【Modelsim】【第六章】结束就是开始
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- 电力项目十三--js添加浮动框
修改page/menu/loading.jsp页面 首先,页面中引入浮动窗样式css <!-- 浮动窗口样式css begin --> <style type="text/ ...
- PHP HTTP协议:防盗链
test.html:主界面 <html> <head> <meta http-equiv="content-type" content="t ...
- 对 js 高程 Preflighted Reqeusts 的理解
看JS高程遇到 Preflighted Reqeusts不大理解,遂百度下: 转自:http://todoit.me/ajax-preflight/ 最近在做一个 VUE 的项目的时候, 和后端的小伙 ...
- 170328、Maven+SpringMVC+Dubbo 简单的入门demo配置
之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息.最近有时间了,打算做一个demo把dubbo在本地跑起来先. 先copy一段dubbo ...
- scrapy - grab english name
wxpath定位-采集验证-入库-使用. from scrapy.spider import Spider from scrapy.crawler import CrawlerProcess clas ...
- 聚币网API[Python3版]
代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import hashlib import requests import time import ur ...
- 权限认证与授权(Shrio 框架)
权限概述 认证: 系统提供的用于识别用户身份的功能, 通常登录功能就是认证功能; -- 让系统知道你是谁 授权: 系统授予用户可以访问哪些功能的证书. -- 让系统知道你能做什么! 常见的权限控制方式 ...
- Storm编程模型及组件流程图
一.Storm编程模型 二.Storm组件流程图