java中的訪問權限有四種 : private default protected public (權限依次增大)
- private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之爲“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
- default:即不加任何訪問修飾符,通常稱爲“默認訪問模式“。該模式下,只允許在同一個包中進行訪問。
- protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之爲“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
- 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>}
}
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屬性。