?? d059c2661c75001d1dddb6604daa6ad2
字號:
//【例4-22】 實例成員類的定義、訪問控制、約束與引用。
//程序清單4-22: InstanceMemberClass.java
package e4_22;
public class InstanceMemberClass {// 主類
public static void main(String[] args) {
new InstanceMemberClass();
}
public InstanceMemberClass() {
// 在外部類的外部對實例成員類實例化
// 格式一:外部類實例.new 內部類構造方法( )
Outer outer = new Outer();
outer.showXY();// 用實例調用實例方法
Outer.staticMethod();// 用類調用類方法
outer.showXY();
outer.instanceMethod();
outer.showXY();
Outer.Inner1 inner1 = outer.new Inner1();
inner1.showXY();
outer.showXY();
// 在外部類的外部對實例成員類實例化
// 格式二:new 外部類構造方法( ). new 內部類構造方法( )
Outer.Inner2 inner2 = new Outer().new Inner2();
inner2.inner2M1();
new Outer().new Inner3().new Inner4();
// 私有實例成員類不能被跨類訪問
// Outer.Inner5 inner5 = new Outer().new Inner5();
new Outer().new Inner7().m1();
}
}
class Outer {// 外部類
private int x = 10;// 實例成員變量
private static int y = 100;// 類變量
public class Inner1 {// 公有實例成員類
private int x;
private int y;
// 不能在實例成員類中定義static變量
// private static int z;
// 但是允許定義"static final" 組合的常量
static final int C = 1;
public Inner1() {
// 直接訪問實例成員類的實例成員變量
x = 20;
y = 200;
// 訪問外部類的實例成員變量
Outer.this.x = 30;
// 訪問外部類的類成員變量
Outer.this.y = 300;
}
void showXY() {
System.out.println(this.getClass() + "的private int x = " + x);
System.out.println(this.getClass() + "的private int y = " + y);
}
}
protected class Inner2 {// 保護實例成員類
// 在實例成員類中定義實例方法
public void inner2M1() {
System.out.println("實例成員類Inner1的反射是:" + this);
}
// 不能在實例成員類中定義static方法
// public static void inner2M2() { }
}
class Inner3 {// 默認實例成員類
public class Inner4 {
public Inner4() {
System.out.println("實例成員類Inner4的反射是:" + this);
System.out.println("實例成員類Inner3的反射是:" + Outer.this);
}
}
// 不能在實例成員類中定義static類
// public static class Inner5_2 { }
}
private class Inner5 { }// 私有實例成員類
// 內部接口其實相當于靜態成員類,而與實例成員類不相當。
interface Inner6 {// 內部接口
public abstract void m1();// 公有抽象方法
void m2();// 接口中的方法默認都是公有抽象方法
}
class Inner7 implements Inner6 {// 實現內部接口Inner6
public void m1() {// 實現抽象方法
System.out.println("實例成員類Inner7的反射是:" + this);
}
public void m2() {// 實現抽象方法
}
}
static void staticMethod() {// 靜態成員方法
// 外部類的靜態方法不能直接引用實例成員類
// Inner1 inner1 = new Inner1();
// 靜態方法不能直接訪問實例變量,只能直接訪問類變量
// x = 40;
y = 400;
}
void instanceMethod() {// 實例成員方法
// 外部類的實例方法才能直接引用實例成員類
// 在外部類的內部對實例成員類實例化:new 內部類構造方法( )
Inner1 inner1 = new Inner1();
// 實例方法可直接訪問類變量和實例變量
x = 50;
y = 500;
}
void showXY() {
System.out.println(this.getClass() + "的private int x = " + x);
System.out.println(this.getClass() + "的private static int y = " + y);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -