学习 JAVA 第六天 ---- 访问控制权限

本贴最后更新于 2576 天前,其中的信息可能已经事过景迁

关于想法

宝宝下来以后,莫名的感觉交好运了,跟江苏 EMS 签合同了,跟考研机构续签合同了,但是压力也大了,这个月 18 号前要出四个工程初期版本.合同才签下来,我踏马胆子是真的肥.

访问控制权限

讲实话,看见标题的时候我觉得就是讲 public,protect 和 private,翻看一看的确是,本准备走马观花,发现入坑不能自拔...废话不多说,上干货.

  1. 访问控制的作用:
    为了实现类可以作为一个轮子一般的存在,使得外界只能调用他而不会改变他,这样在开发这个类的时候就可以随心所欲,而不需要担心调用这个类或方法的地方会不会出错.

  2. 包:库单元注意点

类在初始化的时候本应该全限定名调用(java.util.ArrayList),但是有了 import 机制,就可以在类头(package)下面 import 这个类,那么应为下面的防止重名机制的作用,你在这边使用 ArrayList 的话,编译器就知道你用的是哪个。所以可以直接用 ArrayList 来进行构造.

防重名机制:一个 Java 源代码文件叫做一个编译单元,在一个编译单元中,public 修饰的类有且只有一个,并且这个类还必须是与所在的编译单元的文件名相同(不包括.java),那么这样就保证,因为同一个 package 下面文件名不能重复,所以保证类不会重名.注意:这边的是public修饰的类只有一个,而不是类中构造器方法神马的

  1. 包访问权限
  • public

与其他语言一样的作用,就不多做介绍

  • protected

主要作用:是的只有继承的类才可以调用,如下所示
gunClass 类

package javaLearningDemo;

public  class  gunClass{

	gunClass(){

		System.out.println("fucking init");

	}

	protected  void  biubiubiu()  {

		System.out.println("我向你开了一枪");

	}

	private  void  shakalaka(){

		System.out.println("反正外面调用不了");

	}

}

useGun 类

package javaLearningDemo;

public  class  useGun extends  gunClass{

	public  static  void  main(String[]  args)  {

		gunClass  newGun  =  new  gunClass();//这边会输出

		(new  useGun()).testProtect();

	}

	public  void  testProtect(){

		biubiubiu();//这边可以直接调用,在继承继续深入

	}

}

输出:

fucking init

fucking init

我向你开了一枪
  • private (敲黑板,重点来了)

首先大家都知道用 private 修饰的类或方法,外面都调用不了,那么想一个问题,如果把一个编译单元的类的构造方法给用 private 修饰了,意义何在?存在又有什么用?这个时候想到前面一个修饰词,static,想一下,虽然 private 修饰的类外面不能调用,但是我自己可以调用自己啊,那么也就是,如果编译单元中有一个 static 修饰的方法,就可以实现初始化自己并返回的功能,那么重点来了,前面已经学过,static 修饰的类或方法,包括方法中的变量,从声明的角度讲,无论调用多少次也只会一次声明,简单点说,就是地址上只有一块且不会 发生改变.那么这种现象就叫做 单例模式,话不多说,上代码
被修饰的 singleChair 类:

package javaLearningDemo;

class  singleChair  {

	int  width;

	int  height;

	private  static  singleChair  newChair  =  new  singleChair();

	private  singleChair(){

		System.out.println("我是构造器,我被private限定了");

	}

	static  singleChair  returnChair(){

		return  newChair;

	}

}

调用这个类

package javaLearningDemo;

public  class  useChair  {

	public  static  void  main(String[]  args)  {

		//singleChair testPrivate = new singleChair();不可以这样,因为构造器被private修饰

		singleChair  chair_One  =  singleChair.returnChair();

		singleChair  chair_Two  =  singleChair.returnChair();

		chair_One.height  =  10;

		chair_One.width  =  20;

		chair_Two.height  =  30;

		chair_Two.width  =  40;

		System.out.println("chair_One.height = "  +  chair_One.height);//这边因为单例模式,所以已经被改变

		System.out.println("chair_One.width = "  +  chair_One.width);//这边因为单例模式,所以已经被改变

		System.out.println("chair_Two.height = "  +  chair_Two.height);

		System.out.println("chair_Two.width = "  +  chair_Two.width);

	}

}

输出:

我是构造器,我被private限定了

chair_One.height = 30

chair_One.width = 40

chair_Two.height = 30

chair_Two.width = 40

好了,关于访问权限控制差不多就说这么多,有误之处还望赐教

吐槽

根本不让抱小孩好么,我是他爸爸啊
宝宝天天举着左手想干嘛?
为什么新生儿会蜕皮啊?
话说今天还要去上班,不废话了

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖
  • 日记
    65 引用 • 274 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • sucre

    类名首字母不大写,差评

  • 其他回帖
  • someone

    讲真,我还是个学生,兼职的话,一家软件公司的项目经理和几家考研机构的数据结构讲师….[em02][em02]

  • yangyujiao

    我好奇。楼主是做什么工作的???

  • berrycool

    我有反射我怕谁,一切控制符都是渣

  • 查看全部回帖