关于想法
宝宝下来以后,莫名的感觉交好运了,跟江苏 EMS 签合同了,跟考研机构续签合同了,但是压力也大了,这个月 18 号前要出四个工程初期版本.合同才签下来,我踏马胆子是真的肥.
访问控制权限
讲实话,看见标题的时候我觉得就是讲 public,protect 和 private,翻看一看的确是,本准备走马观花,发现入坑不能自拔...废话不多说,上干货.
-
访问控制的作用:
为了实现类可以作为一个轮子一般的存在,使得外界只能调用他而不会改变他,这样在开发这个类的时候就可以随心所欲,而不需要担心调用这个类或方法的地方会不会出错. -
包:库单元注意点
类在初始化的时候本应该全限定名调用(
java.util.ArrayList
),但是有了 import 机制,就可以在类头(package)下面 import 这个类,那么应为下面的防止重名机制的作用,你在这边使用 ArrayList 的话,编译器就知道你用的是哪个。所以可以直接用 ArrayList 来进行构造.
防重名机制:一个 Java 源代码文件叫做一个编译单元,在一个编译单元中,public 修饰的类有且只有一个,并且这个类还必须是与所在的编译单元的文件名相同(不包括.java),那么这样就保证,因为同一个 package 下面文件名不能重复,所以保证类不会重名.
注意:这边的是public修饰的类只有一个,而不是类中构造器方法神马的
- 包访问权限
- 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
好了,关于访问权限控制差不多就说这么多,有误之处还望赐教
吐槽
根本不让抱小孩好么,我是他爸爸啊
宝宝天天举着左手想干嘛?
为什么新生儿会蜕皮啊?
话说今天还要去上班,不废话了
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于