java学习笔记--基础知识--内部类---在方法中定义

在方法中定义的内部类,我们称之为 local inner class, 局部内部类?

在方法内部定义


interface  MyInterface{
	
	void showMe();
}

public class Outer {
	
	private String name = "DASHA";
	
	
	
//  在函数内部实现的内部类,需要实现某个接口,因为Inner这个类名在getInner函数之外是不可见的,下面的定义是无法编译的
//	public Inner getInner(){
//		
//		public class Inner{
//			
//			public Outer getOuter(){
//				return Outer.this;
//			}
//		}
//		
//		return new Inner();
//	}
	
	public MyInterface getInner(){
	
		String text = "My Name is ";
		//定义一个内部类
		class Inner implements MyInterface{

			//在内部类里既可以访问方法的局部变量,也能访问outer类的属性和方法
			@Override
			public void showMe() {
				System.out.println(text + name);
			}
		}
		
		return new Inner();  //此处实际返回的类型是MyInterface
        }

        public void showInner(){
		
		//Inner类仅在它定义的那个方法中可见
		//Inner dd = new Inner()
	}
	
	
	public static void main(String[] args){
		
		MyInterface mi = new Outer().getInner();
		
		mi.showMe();

	}

}

 

在方法内部的局部区域定义内部类

interface  MyInterface{
	
	void showMe();
}

public class Outer {
	
	private String name = "DASHA";
	
	public MyInterface getInner(boolean bCreate){
		
		//如果内部类没有阐释改下text的内容,那么也可以不用final修饰  
		//反正意思就是Inner类不要修改所在的方法的局部变量
		//String text = "You are";
		final String text = "You are ";
		
		if(bCreate){
			//定义一个内部类,它尽在这个if分支中可见
			class Inner implements MyInterface{
	
				//在内部类里既可以访问方法的局部变量,也能访问outer类的属性和方法
				@Override
				public void showMe() {
					System.out.println(text + name);
				}
				
				public Inner(String desc){
					name = desc;
				}
			}
		
			return new Inner("HUAIDAN");  //此处实际返回的类型是MyInterface
		
		}else{
			
			//此处是无法使用Inner的,Inner只能在它定义的那个scope中访问
			//return new Inner();
			
			return null;
		}
    }
	
	
	public static void main(String[] args){
		
		MyInterface mi = new Outer().getInner(true); //这里需要注意的是就是传入的是false,inner类也会被编译出来
		
		mi.showMe();

	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值