1. 程式人生 > >java面向物件中四種許可權(private,protected,public,友好型)詳解

java面向物件中四種許可權(private,protected,public,友好型)詳解

俗話說沒有規矩就沒有方圓,java作為一門嚴謹的面向物件的高階程式語言,自然對許可權整個重要的問題有嚴格的控制。

Java一共有四種許可權,private (私有)public(公有)Protected(受保護)還有友好型

在java裡,這些語句都可以修飾類中的成員變數和方法,但是隻有public和友好型可以修飾類。舉個例子:

接下來就詳細解釋一下這幾種許可權的差別(部落格最後有表格)按許可權由低到高:(高許可權有低許可權所有特性)

Private:

     類中的所有private方法和private 成員變數只能在類中訪問而不能在其他類中訪問。

例如:

package Main;

public class Private {
	private int a;
	private int b;
	Protected (){
		this.a=1;
		this.b=2;//a和b只能在Private類中呼叫
	}
	private void set(){
		System.out.println(""+a+""+b+"\n");
	}
	void Print(){
		this.set();//只能在這裡用;
	}
}


友好型和protected:

     如果在另一個類中宣告其他的一個類,如果這兩個在一個包中那麼另一個類能訪問這個其他類的友好型變數不同包不能訪問:

     如果在另一個B類中宣告其他的一個類A,如果這兩個在一個包中那麼另一個類B也能能訪問這個其他類A的protected變數(或方法),如果不在一個包,那麼如果類A有一個父類C如果,如果父類C中有一個protected變數(或方法),只要B,C在一個包中,B就能使用A中從父類繼承的protected方法。如果A是B的子類,如果AB不在一個包中,那麼A可以使用B中protected方法。

例如:

package Main;
import Protected.*;
public class Main {
	public static void main(String args[]){
		Protected jkl=new Protected();
		jkl.Print();//呼叫jkl父類的protect方法
		Frindly prot =new Frindly();
		System.out.println(prot.a);//在Main類中呼叫友好型的變數
		prot.set();//在Main類中呼叫友好型的方法
	}
}
package Main;

public class Frindly {
	int a,b,c,d;
	Frindly(){
		a=b=c=d=1;
	}
	void set (){
		System.out.print(""+a+" "+b+"\n");
	}
}
package Main;
public class Protectedfather{
	protected int a;
	private int b;
	protected Protectedfather (){
		this.a=1;
		this.b=2;//a和b只能在Protected中呼叫
	}
	private void set(){
		System.out.println(""+a+""+b+"\n");
	}
	protected void Print(){
		this.set();//只能在這裡用;
	}
}

package Protected;
import Main.*;
public class Protected extends Protectedfather{
	public Protected(){
		super();//在另一個包中呼叫裡父類中的protect構造方法
		super.a=12;//呼叫父類的protect變數
	}
}


Public:

     如果類中的方法或者變數是public,那麼就可以在別的類中呼叫,沒有限制(用在誇包)。A帶掉用別的包中的B類

package Main;
import Public.*;
public class Main {
	public static void main(String args[]){
		int a;
		Public p=new Public();//呼叫public類中的public方法
		a=p.a;//呼叫Public類中的public變數
		p.set();
	}
}

package Public;

public class Public {
	public int a=12;
	public void set (){
		System.out.println("OK\n");
	}

}


總結表格::

同一類

同包

不同包

子類

非子類

子類

非子類

Private

  否

友好型

Protected

Public