1. 程式人生 > >java類的訪問許可權問題(public default private protected)

java類的訪問許可權問題(public default private protected)

      java中的訪問許可權有四種 : private default  protected public (許可權依次增大)

  1. private: Java語言中對訪問許可權限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的物件訪問,其子類不能訪問,更不能允許跨包訪問。
  2. default:即不加任何訪問修飾符,通常稱為“預設訪問模式“。該模式下,只允許在同一個包中進行訪問。
  3. protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
  4. public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
本類 本包 跨包子類 不同包的非子類
private  
default  √
protected
public

      第一種:private

                    訪問許可權最小;  只能在本類中使用(可以在本類中的內部類使用。。。)

程式碼 1 (本類使用情況)

<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java">package java2實用教程練習;


class Person {
<span style="white-space:pre">	</span>private String name;


<span style="white-space:pre">	</span>public Person(String name) {
<span style="white-space:pre">		</span>this.name = name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String tell() {
<span style="white-space:pre">		</span>return this.name;
<span style="white-space:pre">	</span>}
}


public class Demo1 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>Person per = new Person("Victent");
<span style="white-space:pre">		</span>System.out.println(per.tell());
<span style="white-space:pre">		</span>per.name = "贗品!!!";
<span style="white-space:pre">	</span>}
}
 在上面的程式碼中類Person中的name屬性的訪問許可權是私有的  也就說只能不在本類中使用。其中的構造方法可以直接的在類的內部對name進行賦值,這就是在類的內部進行賦值。  但是在Demo主類中就不能修改name的屬性,是因為這不是類的內部了。是別的類了。。。。。。

程式碼2(本類的內部類中使用)

package java2實用教程練習;

class Outer {
	private String name = "Victent";
	class Inner {
		public String tell() {
			return name;
		}
	}
}
public class Demo1 {
	public static void main(String args[]) {
		Outer out = new Outer();
		Outer.Inner inner = out.new Inner();
		System.out.println(inner.tell());
	}
}
</pre>在上面的程式碼中內部類inner直接返回了外部類中的name屬性,也就是說可以子類也可以使用。。。。</p><p>         <span style="color:#ff0000;">第二種:default </span>只能夠在本包中使用,比剛才的private許可權稍微的大了一些。一個包可以有很多的檔案的,這個時候就可以不用直接的導包就能實現了。。。。</p><p>    當然deault(預設的,不用寫就行)自然可以在本類以及本類的子類中使用了。就不寫程式碼贅述了。</p><p>程式碼2.1 (Demo1.java)<pre name="code" class="java">package java2實用教程練習;

class Person {
	String name;

	Person(String name) {
		this.name = name;
	}

	public String tell() {
		return this.name;
	}
}
程式碼2.2(Demo2.java)
package java2實用教程練習;


public class Demo2 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>Person per = new Person("Victent");
<span style="white-space:pre">		</span>System.out.print(per.tell());
<span style="white-space:pre">	</span>}
}
上面的兩段程式碼放在一個檔案中,先編譯第一個之後再編譯第二個。 在程式碼中可以看出來,在第二段程式碼中可以直接的訪問第一段程式碼的Person類中的屬性name 。       第三種:protected 比default許可權還要大點。可以在不同包的子類中使用。 程式碼3.1
package java2實用教程練習;

class Person {
	  protected String name;

}
程式碼3.2 
package javapractice;
import java2實用教程練習.*;
class Plice extends Person{
	public Plice(String name){
		 super.name  = name ;
	}
	public void getTell(){
		System.out.print(super.name);
	}
}
public class Demo70 {
	public static void main(String[] args) {
      Plice plice = new Plice("Victent") ;
      plice.getTell();
	}

}
第二段程式碼可以直接的使用第一段程式碼中的name屬性。      第四種:public 許可權是最大的許可權。隨便用~~  就不寫程式碼了。。。。