Java内部类的定义及在外部使用的方法

文章目录

1、静态内部类

public class Outer {
	
	static class StaticInner{
		public void show() {
			System.out.println("StaticInner");
		}
	}
 
	public static void main(String[] args) {
		Outer.StaticInner inner = new Outer.StaticInner();
		inner.show();
	}
 
}

2、实例内部类(非静态内部类)

public class Outer {
	
	class MemberInner{
		public void show() {
			System.out.println("MemberInner");
		}
	}
 
	public static void main(String[] args) {
		Outer outer = new Outer();
		Outer.MemberInner inner = outer.new MemberInner();
		inner.show();
	}
 
}

3、静态内部类访问嵌套它的外部类的静态成员

public class Outer {
	
	private static int sa = 5;
	private int ia = 10;
	
	static class StaticInner{
		public void show() {
			//静态内部类可以访问嵌套它的外部类的静态成员
			System.out.println("Outer's sa = " + sa);
			//Error。静态内部类不能访问嵌套它的外部类的实例成员
			//System.out.println("Outer's ia = " + ia);
		}
	}
 
	public static void main(String[] args) {
		Outer.StaticInner inner = new Outer.StaticInner();
		inner.show();
	}
 
}

4、实例内部类访问嵌套它的外部类的成员

public class Outer {
	
	private static int sa = 5;
	private int ia = 10;
	
	class MemberInner{
		public void show() {
			System.out.println("Outer's sa = " + sa);
			System.out.println("Outer's ia = " + ia);
		}
	}
 
	public static void main(String[] args) {
		Outer outer = new Outer();
		Outer.MemberInner inner = outer.new MemberInner();
		inner.show();
	}
 
}

5、内部类跟嵌套它的外部类属性重名时的访问方法

public class Outer {
	
	private static int sa = 1;
	private int ia = 2;
	
	static class StaticInner{
		
		private static int sa = 10;
		private int ia = 20;
		
		public void show() {
			System.out.println("From StaticInner: Outer's sa = " + Outer.sa);
			System.out.println("From StaticInner: StaticInner's ia = " + ia);
		}
	}
	
	class MemberInner{
		//Error。实例内部类中不能有非常量的静态属性
		//private static int ta = 1000;
		private static final int ta = 100;
		private int ia = 200;
		
		//Error。实例内部类中也不能有静态的方法
		/*public static void nothing() { }*/
		
		public void show() {
			System.out.println("From MemberInner: Outer's sa = " + Outer.sa);
			System.out.println("From MemberInner: Outer's ia = " + Outer.this.ia);
			
			System.out.println("From MemberInner: MemberInner's sa = " + MemberInner.ta);
			System.out.println("From MemberInner: MemberInner's ia = " + this.ia);
		}
	}
 
	public static void main(String[] args) {
		Outer.StaticInner si = new Outer.StaticInner();
		si.show();
		
		Outer.MemberInner mi = new Outer().new MemberInner();
		mi.show();
	}
 
}

6、方法中定义的内部类

public class Outer {
	
	private static String staticOuterMsg = "static outer message";
	private String memberOuterMsg = "member outer message";
	
	public void show(String argMsg) {
		String normalLocalMsg = "normal local message";
		final String finalLocalMsg = "final local message";
		class Inner{
			public void print() {
				System.out.println(staticOuterMsg);
				System.out.println(memberOuterMsg);
				System.out.println(finalLocalMsg);
				//Error。方法中的内部类只能访问final局部变量
				//System.out.println(normalLocalMsg);
				//Error。方法中的内部类只能访问final局部变量。
				//System.out.println(argMsg);
			}
		}
		
		new Inner().print();
	}
 
	public static void main(String[] args) {
		new Outer().show("argument message");
	}
 
}

    原文作者:萧曵 丶
    原文地址: https://blog.csdn.net/chenyao1994/article/details/85011773
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞