📄 instancememberclass.java
字号:
//【例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 + -