⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instancememberclass.java

📁 java程序设计教程的源码
💻 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 + -