震惊!!!java--史上最全的内部类解析

//---内部测试类
public class Test01 {	
	public static void main(String[] args) {
		/**
		 * 知识点:内部类
		 * 含义:一个类的内部还有另一个类
		 * 分类:
		 * 		1.成员内部类
		 * 		2.静态内部类
		 * 		3.接口内部类
		 * 		4.局部内部类
		 * 		5.匿名内部类
		 * 
		 * 知识点:成员内部类
		 * 经验:类似于成员变量
		 * 编写位置:在类里,方法外
		 * 需求:调用成员内部类里的方法
		 * 特点:成员内部类可以调用外部类所有的属性
		 * 总结:创建成员内部类对象,必须先创建外部类对象
		 */		
		//创建成员内部类
		Inner inner = new Outter().new Inner();	
		inner.method();		
	}
}
//-------------
public class Outter {	
	private 	String str1 = "外部类属性1";
				String str2 = "外部类属性2";
	protected 	String str3 = "外部类属性3";
	public		String str4 = "外部类属性4";
	final		String str5 = "外部类属性5";
	static		String str6 = "外部类属性6";
	static final String str7 = "外部类属性7";	
	//成员内部类
	class Inner{		
		String str1 = "内部类属性1";		
		public void method(){			
			System.out.println("成员内部类里的方法 " + str1);
			System.out.println("成员内部类里的方法 " + Outter.this.str1);//外部类和成员内部类属性名冲突的情况(理解:Outter.this找到外部类的对象)
		System.out.println("成员内部类里的方法 " + str2);//默认实现:Outter.this.str2
		System.out.println("成员内部类里的方法 " + str3);//默认实现:Outter.this.str3
		System.out.println("成员内部类里的方法 " + str4);//默认实现:Outter.this.str4
		System.out.println("成员内部类里的方法 " + str5);//默认实现:Outter.this.str5
		System.out.println("成员内部类里的方法 " + str6);//默认实现:Outter.str6
		System.out.println("成员内部类里的方法 " + str7);//默认实现:Outter.str7
		}
	}
}

2.2静态内部类

//---测试类
public class Test01 {	
	public static void main(String[] args) {
		/**
		 * 知识点:静态内部类
		 * 经验:类似于静态变量
		 * 编写位置:在类里,方法外
		 * 需求:调用静态内部类里的方法
		 * 特点:静态内部类只能调用外部类静态属性
		 * 总结:创建静态内部类对象,不需要创建外部类的对象
		 * 
		 * 面试题:静态内部类为什么不能调用外部类的成员属性?
		 * 因为创建静态内部类对象时不需要创建外部类对象,所以外部类的成员属性不会被创建,就不能调用
		 */		
		//创建静态内部类
		Inner inner = new Outter.Inner();		
		inner.method();
	}
}
//外部类
public class Outter {	
	static String str1 = "外部类属性1";	
	//静态内部类
	static class Inner{		
		String str1 = "内部类属性1";		
		public void method(){
			System.out.println("静态内部类里的方法 " + str1);
			System.out.println("静态内部类里的方法 " + Outter.str1);
		}
	}
}

3.3接口内部类

//---测试类
public class Test01 {	
	public static void main(String[] args) {
		/**
		 * 知识点:接口内部类
		 * 编写位置:在接口里,方法外
		 * 需求:调用接口内部类里的方法
		 * 特点:接口内部类只能调用外部接口静态属性
		 * 总结:接口内部类的使用方法类似于静态内部类
		 */		
		//创建接口内部类
		Inner inner = new IOutter.Inner();		
		inner.method();
	}
}
//外部接口--类
public interface IOutter {	
	String str1 = "接口属性1";	
	//接口内部类:默认添加static
	class Inner{		
		String str1 = "内部类属性1";		
		public void method(){
			System.out.println("接口内部类里的方法 " + str1);
			System.out.println("接口内部类里的方法 " + IOutter.str1);
		}
	}
}

4.4局部内部类

//---测试类
public class Test01 {	
	public static void main(String[] args) {
		/**
		 * 知识点:局部内部类
		 * 编写位置:在方法里
		 * 需求:调用局部内部类里的方法
		 * 特点:局部内部类类似于局部变量,不能使用访问修饰符修饰
		 */		
		//创建外部类对象
		Outter outter = new Outter();		
		outter.outterMethod();
	}
}
//外部类
public class Outter {	
	public void outterMethod(){
		//局部内部类
		class Inner{
			public void innerMethod(){
				System.out.println("局部内部类的方法");
			}
		}		
		//创建局部内部类的对象
		Inner inner = new Inner();
		inner.innerMethod();
	}
}

5.5深入局部内部类

//---测试类
public class Test01 {	
	public static void main(String[] args) {
		/**
		 * 知识点:局部内部类
		 * 编写位置:在方法里
		 * 需求:调用局部内部类里的方法
		 * 特点:局部内部类类似于局部变量,不能使用访问修饰符修饰
		 */		
		//创建外部类对象
		Outter outter = new Outter();		
		Object obj = outter.outterMethod();		
		System.out.println(obj);
	}
}
//外部类
public class Outter {	
	public Object outterMethod(){		
		//外部类的局部变量在局部内部类中使用,JDK1.8版本下该变量会默认使用final修饰
		//为什么要加final?
		//因为将局部内部类的对象返回给外界后,该变量还能继续使用
		int i = 100;		
		//局部内部类
		class Inner{
			public String toString(){
				return "局部内部类 " + i;
			}
		}		
		//创建局部内部类的对象
		Inner inner = new Inner();		
		return inner;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值