俗話說沒有規矩就沒有方圓,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 |
是 |
是 |
是 |
是 |
是 |