felayman——第六章——访问权限控制

本文详细介绍了Java中的访问控制权限,包括public、private、protected和default四种关键字,并解释了这些关键字如何应用于类及其成员。此外,文章还讨论了包的作用及如何避免类冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.felay.demos;
import static java.lang.Math.*;
public class Demo4 {
		public static void main(String[] args) {
			/**
			 * java的访问控制权限是通过四个关键字来进行实施的
			 * 	1.private
			 * 	2.protected
			 * 	3.default(暂且这么说)
			 * 	4.public 
			 * 
			 * 当我们打开java的源码的时候,我们回发现所有的class文件都在许多
			 * 不同的包里,就是哪些以com,sun,java,javax,开头的多级目录组成
			 * 的包,刚开始在学习java的时候,还在想,为什么不把所有的class文件都
			 * 放在一个文件夹下呢?那样查找和使用多方便啊,后来随着学习的深入,才发现
			 * 自己的想法有多么幼稚.现在看来,之所以有包的存在,就是解决我们在编程的
			 * 过程中可能会出现的类冲突问题,假如我们在一个公司合作开发项目的时候,我
			 * 们无法保证每个人编写的类都是独一无二的,甚至能跟java类库中的类也不会
			 * 出现冲突,因为一旦出现类冲突的时候,JVM就无法正确辨别我们想要使用的类
			 * 因此,这个时候包就显示的很重要了,记得刚开始学习的java的时候,总是直接在
			 * Eclipse下的src目录下直接建立class文件,而现在也会随着规范来进行包
			 * 的合理命名,尤其是在学习MVC模式后,能够更加合理的命名各个包的名称.当我们写
			 * 出自己定义的类的时候,我们只需要在class文件的最开始处写出这样的语句:
			 * package  包名即可,然后在其他的类文件中需要使用该类的时候,只需要使用
			 * import语句把我们自己定义的类导入即可,这跟VC中的include和namespace
			 * 很类似,都是为了解决出现类冲突的问题.有时候,我们在使用一个java的类库的时候
			 * 我们需要使用到同一个包里的许多类文件,经典的时候java的IO和java的swing
			 * 都需要使用到同一个包里的多个文件,此时我们就可以不用一个文件一个个导入的,
			 * 我们可以这样一次把该包中的所有文件同时导入 import 包名*;这样我们就看不到
			 * 在程序最上方的一大把笼子import语句了.再有有时候我们在使用一些工具库的时候
			 * 不想总是重复的输出类名来调用静态方法,那么这个时候我们就可以使用静态带入了
			 * import static 包名;这样的使用一般是在我们使用工具类库,比如Math类的时候
			 * 这样我们就会在调用该类的方法的时候就不要总是写上Math了,如下
			 */
			max(100, 200);
			min(100,200);
			abs(-100);
			ceil(10.9);
			/**
			 * 这个时候,我已经在最上面静态导入了Math类,在使用它的方法的时候,就不需要在方法前
			 * 带上类名了.
			 * 下面我们就开始说说上面的四个访问权限控制的关键字.
			 * 1.public   
			 * 	书上把public叫做接口访问权限,意思就是该关键字后的所有成员都可以访问到该关键字申明
			 * 的成员.但是总是感觉书上这样说并不是很明朗,我们可以换个说法,就取其本意,公开的,何为公开
			 * 呢?就是该成员变量对外界是公开的,不仅本类中的任何地方可以方该成员,而且在类的外部也可以访
			 * 问到该成员,意思就是,我们在某个类内部定义了一个public成员,那么只要我们拥有该类的实例,
			 * 我们就可以访问该成员,不管该类的实例在哪个地方,在同一个文件中也可以,在同一个包也可以,在
			 * 不同的包也可以,这就体现出了公开的意思.但是这么做是非常危险的,因为数据没有安全性,因此,
			 * 在很多时候我们只是对类的成员方法进行公开,而成员属性我们往往是进行私有保护的.那么就涉及
			 * 到另外一个关键字
			 * 2.private 
			 * 	private表示私有的,也就是说,凡是被private修饰的成员,都只能在本类中其他的成员访问,其他
			 * 地方都无法访问该成员,包括同一个文件中的其他类,也无法访问,这个关键字对数据的保护非常好,因此,我们
			 * 往往把一些成员属性都使用private来进行保护,而把访问该属性的方法使用public给外界.当然也有一些
			 * 例外,有些时候,一些成员方法也是需要使用private来进行访问,这就需要你写自己定义的类的时候对业务的
			 * 需求了,其中最经典的是单例模式,把构造方法都给private私有了,外界无法new一个对象,而只能通过public
			 * 的方法来获取实例对象.但是有时候,我们在使用一个成员的时候,我们希望在本类以外的其他地方无法访问成员,但是
			 * 在它的子类中,却可以访问到的,这个时候我们就可以使用另外一个关键字
			 * 3.protectd
			 * 	这个关键字,很多时候我们使用到的并不是很多,因为现在的软件工程,好像都喜欢使用组合而非继承,因此使用到
			 * protected的地方就不多了,但是并不是说就不使用继承了,我们可以看看java的源码,在他的源码中就大量的使
			 * 用了了继承,只是因为,作为一个类库,他本身就需要高度耦合性.而protected正体现了在单根层次上的数据共享,
			 * 因为被protected修饰的成员,只能在某一个层级结构上进行传递,而且只能是在子类获取父类中的protected
			 * 成员,想法却不行,很遗憾,protected只能在继承中使用.
			 * 4.default
			 * 	这个是包访问权限,就是那些不带权限修饰符的成员,它们可以被在同一包的该类的实例对象所访问到,但是一旦出了这个包
			 * 就不允许访问了.因为很多时候,一个包里的类文件的耦合性比较高,如果总是使用其他修饰符就有些不方便了,但是包括java
			 * 的的设计者们都不建议这么做,即我们在使用成员的时候,建议使用修饰符,这样程序会更加健壮.
			 * 
			 * 
			 * 
			 * 上面说的都是某个类的成员的访问权限,那么类本身有没有访问权限呢?当然有,不过类只有三种访问权限的关键词
			 * 1.public
			 * 2.private
			 * 3.default(暂且这么说)
			 * 
			 * 如果一个类被public修饰,则表明该类能够在任何地方被使用,而且基本上每个文件都只有一个public修饰的类,
			 * 而且文件名称还必须和Public修饰的类的名称保持一致才能被JVM所编译.我们编写类的目的就是使用该类,那么此时
			 * 的private修饰的类有何意义呢?在最开始的时候不明白为什么会使用private来修饰类,直到现在也不是很理解,
			 * 尽管的确可以使用private来修饰类,但是只是限制于在内部类的使用中才会出现这样的情况,但是在内部类中使用
			 * private来修饰类,本身意义也不大,因此,直到现在,我对那些使用private修饰的类,都很害怕.而default就是
			 * 那些没有访问权限修饰符修饰的类,一般只是测试的时候使用,或者作为辅助类来使用,大多时候使用不到,也不建议,但是
			 * 在swing编程中,确实被大量使用,所有的监听器就是作为辅助类来使用默认修饰.下面就给出一个被private修饰的类
			 * 但是不建议这么写.,因为这样写的时候,容易出现逻辑紊乱,而且意义也不是很大,(swing编程除外),在swing编程中
			 * 出现了大量的类似写法.
			 */
		}
		private class Demo5{
			private String name;
			public String getName(){
				return this.name;
			}
		}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值