现在的位置: 首页 > 综合 > 正文

内部类简析

2019年09月19日 ⁄ 综合 ⁄ 共 2407字 ⁄ 字号 评论关闭

1、在该外部类以外的地方访问外部类中成员位置上非静态的内部类。

package innerclass;

/*
 * Inner这个类存在与外部类的成员位置上,要访问它的话,其实就是在访问Outer的成员,
 那么就需要创建Outer的对象。拿到Outer的对象之后,就可以访问到Outer类中的所有成员,
 只是这Inner是类,要访问Inner中的成员,还必须创建Inner的对象。

访问方式:
 	Outer out = new Outer();
 	Outer.Inner in = out.new Inner();
 in.show();
 */
public class Demo1 {
	public static void main(String[] args) {
		OuterDemo1.InnerDemo1 in = new OuterDemo1().new InnerDemo1();
		in.showDemo1();
	}
}

class OuterDemo1 {
	int num = 10;

	class InnerDemo1 {
		int x = 100;

		void showDemo1() {
			System.out.println("Inner show x = " + x);
			System.out.println("Inner show num = " + num);
		}
	}
}

总结:因为内部类不是静态,调用是需要先实例外部类再实例内部类才能调用。

===========================================================================================================================

2、在外部类以外的地方访问外部类中成员位置上静态的内部类。

package innerclass;
/*当内部类在外部类的成员位置上,被静态修饰,这时就相当于在访问外部类的静态成员内容。
  访问一个类中的静态成员,可以通过这个类名直接访问。
访问方式:
	Outer.Inner in = new Outer.Inner();
	in.show();
	
 */
public class Demo2 {
	public static void main(String[] args) {
		OuterDemo2.InnerDemo2 in = new OuterDemo2.InnerDemo2();
		in.show();
	}
}

class OuterDemo2
{
	static int num = 10;
	
	static class InnerDemo2
	{
		int x = 100;

		void show()
		{
			System.out.println("Inner show x = "+ x);
			System.out.println("Inner show num = "+ num);
		}
	}
}

总结:因为内部类被静态,所以只需要实例外部类就可以打“.”调用内部类了。

===========================================================================================================================

3、在外部类以外的地方访问外部类中成员位置上静态内部类中的静态成员。

package innerclass;
/* 当内部类是在外部类成员位置上被静态了且这个内部类中的成员也被静态了,那么外部类以外的地方
就可以直接使用外部类名.内部类名.内部类成员的方式来访问。
访问方式:
	Outer.Inner.show();
 */
public class Demo3 {
	public static void main(String[] args) {
		OuterDemo3.InnerDemo3.show();
	}
}

class OuterDemo3
{
	static int num = 10;

	static class InnerDemo3
	{
		static int x = 100;

		static void show()
		{
			System.out.println("Inner show x = "+ x);
			System.out.println("Inner show num = "+ num);
		}
	}
}

总结:因为都是静态,所以可以直接打“.”调用。

===========================================================================================================================

4、在内部类的方法中分别访问外部类的成员变量、内部类中的成员变量、内部类中的局部变量

package innerclass;

/*
 * 在内部类的方法中分别访问外部类的成员变量、内部类中的成员变量、内部类中的局部变量
 */
public class InnerTest {
	public static void main(String[] args) {
		new Outer().new Inner().method();
	}
}

class Outer {
	int num = 10;

	class Inner {
		int num = 100;

		void method() {
			int num = 1000;
			System.out.println(Outer.this.num + "应该是10");
			System.out.println(this.num + "应该是100");
			System.out.println(num + "应该是1000");
		}
	}
}

===========================================================================================================================

注意:1、内部类是可以直接访问外部类成员位置上的内容,但外部类是无法访问内部类中的内容。
            2、当内部类在外部类的成员位置上,没有被静态修饰时,这个内部类中不能有静态成员。

抱歉!评论已关闭.