和前一個教程一樣,我們也建了一個子目錄,用來存放不同package的類
屬性分為2種,
1 類實例的屬性,屬於某個類的實例所有,必須通過實例訪問
2 類級的靜態屬性,屬於類和所有實例所有,可通過類或者實例都可以訪問
屬性的權限分為
1 private 私有屬性
2 [default] 默認屬性,也就是啥都不寫的那種,運行同一個package的訪問
3 protected 被保護的屬性,允許同一個package的訪問,以及子類訪問
4 public 公開的屬性,可以被任何類訪問
先看主類
lession4/Lession4.java
package lession4;
/**
* 老紫竹JAVA基礎培訓(4),熟悉屬性/變量的訪問權限.<br>
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class Lession4 {
// -----------------------
// -- 實例屬性,屬於類的某個實例
// ------------------------
// 私有的實例屬性
// 只有類自己能訪問
private int num1 = 1;
// 默認的實例屬性
// 自己和同一個package的其它類可以訪問
int num2 = 2;
// 被保護的實例屬性
// 自己和同一個pacakge的類以及子類可以訪問
protected int num3 = 3;
// 公開的實例屬性
// 任何其它類都可以訪問
public int num4 = 4;
// -----------------------
// -- 類靜態屬性,屬於類的所有實例
// ------------------------
// 私有的類靜態屬性
// 只有類自己能訪問
private static int num11 = 1;
// 默認的類靜態屬性
// 自己和同一個package的其它類可以訪問
static int num12 = 12;
// 被保護的類靜態屬性
// 自己和同一個pacakge的類以及子類可以訪問
protected static int num13 = 13;
// 公開的類靜態屬性
// 任何其它類都可以訪問
public static int num14 = 14;
public static void testStatic() {
// 方法的局部變量
// 只有方法內部可以訪問
int num21 = 21;
// 使用屬性
// 在靜態方法裡面可以使用靜態屬性
// 不能使用類實例屬性
num11 = 11;
num12 = 12;
num13 = 13;
num14 = 14;
}
public void testInstance() {
// 方法的局部變量
// 只有方法內部可以訪問
int num31 = 31;
// 使用屬性
// 在非靜態方法裡面可以使用實例屬性
num1 = 1;
num2 = 2;
num3 = 3;
num4 = 4;
// 在非靜態方法裡面可以使用靜態屬性
num11 = 11;
num12 = 12;
num13 = 13;
num14 = 14;
}
}
lession4/TestSamePackage.java
package lession4;
/**
* 相同package的類。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class TestSamePackage {
public void test() {
Lession4 lession4 = new Lession4();
// 可以使用非private的所有類實例級屬性
lession4.num2 = 2;
lession4.num3 = 3;
lession4.num4 = 4;
// 可以使用了非private的所有類級的靜態屬性
lession4.num12 = 12;
lession4.num13 = 13;
lession4.num14 = 14;
// 測試訪問私有屬性
// lession4.num1=1;
}
}
lession4/otherpackage/TestSubClassOtherPackage.java
package lession4.otherpackage;
import lession4.Lession4;
/**
* 測試其它package的子類。<br>
* 可以訪問public和protected的屬性。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class TestSubClassOtherPackage extends Lession4 {
public void test() {
// 可以使用protected和public的類實例級屬性
num3 = 3;
num4 = 4;
// 可以使用protected和public的類級靜態屬性
num13 = 13;
num14 = 14;
}
}
lession4/otherpackage/TestOtherPackage.java
package lession4.otherpackage;
import lession4.Lession4;
/**
* 測試其它package的類。<br>
* 只能訪問public屬性
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class TestOtherPackage {
public void test() {
Lession4 lession4 = new Lession4();
// 只能使用public的類實例級屬性
lession4.num4 = 4;
// 只能使用public的類級靜態屬性
lession4.num14 = 14;
}
}
測試:
1 TestSamePackage.java裡訪問私有屬性,去掉注釋即可,看看編譯的結果