java學習記錄之訪問權限

public的class 可以被任何包訪問,而default的 class 只能被本包下面的類訪問

實際的例子

用到的兩個文件,而且他們隸屬於不同的package

Func.java  Main.java

Func.java

package a;
class Func {
        public static void print_info() {
                System.out.println("class Func!");
        }
}

Main.java

import a.*;
public class Main {
        public static void main(String agrs[]) {
                System.out.println("hello!");
                a.Func.print_info();
        }


}

執行結果

lydia@lydia:~/sgy/java_learn/access_permission$ javac -d . Main.java
Main.java:6: 錯誤: Func在a中不是公共的; 無法從外部程序包中對其進行訪問
                a.Func.print_info();
                 ^
1 個錯誤

說明 public Main類訪問不了 default 的Func類

將Func 改成public Func或者 將Main 放在同一個包(package a;)即可訪問

lydia@lydia:~/sgy/java_learn/access_permission$ java a.Main
hello!
class Func!

關於訪問權限的總結
在這裏插入圖片描述

default的變量的訪問權限也是隻有同一個包才能訪問!

Func.java

package a;
public class Func {
        int x = 9;
        public static void print_info() {
                System.out.println("class Func!");
        }
}

Main.java


//package a;

import a.Func;
public class Main {
	public static void main(String agrs[]) {
		Func f = new Func();
		f.x = 8;
	}

	
}

編譯的時候通過不了

Main.java:8: 錯誤: x在Func中不是公共的; 無法從外部程序包中對其進行訪問
                f.x = 8;
                 ^
1 個錯誤

說明即便Func是public的,但是default的變量不允許不同的包訪問!

將Main更改成 package a即可成功編譯通過,並且訪問這個變量!

protected的類成員變量只能被其子類所訪問,且只能在子類的內部被訪問!

實際的例子:

用到的兩個文件,而且他們隸屬於不同的package

Func.java  Main.java

Func.java


package a;
public class Func {
	protected int x = 9;
	//int x = 9;
	public static void print_info() {
		System.out.println("class Func!");
	}
}

Main.java


package b;

import a.Func;

class Sub_Func extends Func {
	void print() {
		System.out.println("Func->x:"+x);
	}
}
public class Main {
	public static void main(String agrs[]) {
		Sub_Func f = new Sub_Func();
		f.print();
		f.x = 8;
	}

	
}

執行結果

lydia@lydia:~/sgy/java_learn/access_permission$ javac -d . Main.java
Main.java:15: 錯誤: x 在 Func 中是 protected 訪問控制
                f.x = 8;
                 ^
1 個錯誤

說明在不同的package,類外即便是通過子類也是訪問不了protected的成員的!

去掉下面這一行語句是能夠執行通過的。

f.x = 8

PS:

  1. 一個java文件裏不能同時寫兩個public的類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章