java類的訪問許可權問題(public default private protected)
阿新 • • 發佈:2019-02-10
java中的訪問許可權有四種 : private default protected public (許可權依次增大)
- private: Java語言中對訪問許可權限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的物件訪問,其子類不能訪問,更不能允許跨包訪問。
- default:即不加任何訪問修飾符,通常稱為“預設訪問模式“。該模式下,只允許在同一個包中進行訪問。
- protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
- public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
本類 | 本包 | 跨包子類 | 不同包的非子類 | |
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
第一種:private
訪問許可權最小; 只能在本類中使用(可以在本類中的內部類使用。。。)
程式碼 1 (本類使用情況)
在上面的程式碼中類Person中的name屬性的訪問許可權是私有的 也就說只能不在本類中使用。其中的構造方法可以直接的在類的內部對name進行賦值,這就是在類的內部進行賦值。 但是在Demo主類中就不能修改name的屬性,是因為這不是類的內部了。是別的類了。。。。。。<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>} }
程式碼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.1package 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 許可權是最大的許可權。隨便用~~ 就不寫程式碼了。。。。