• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

黄文超

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

内部类相关问题

内部类

1、局部内部类

在什么场景下回使用局部内部类呢?

public class Demo01 {
	
	public static void main(String[] args) {
		/**
		 * 假设我们现在要调用接口中的方法,这个方法需要传递一个参数,是一个接口类型
		 * 这个时候我们没法实例化这个接口,并且这个东西我们可能只需要使用一次
		 * 因此我们需要写一个内部类来实现
		 */
		class Student implements Person {
			@Override
			public void test() {
				// TODO Auto-generated method stub
				
			}
		}
		Student s = new Student();
		//此时我们就可以使用Other类里面的方法了
		Other o = new Other();
		o.test(s);
	}
	
}

interface Person {
	public void test();
}

class Other {
	public void test(Person p) {
	}
}

简单来说,使用场景就是:

​ 1、不需要重复多次使用的类

​ 2、需要使用的方法传递的参数不方便实例化

2、为什么内部类中使用外部类的成员变量必须是final修饰的?

/**
 * 内部类
 */
public class Outer {
	int a = 10;
	//a = 20;
	/**
	 * 外部类
	 */
	class inner {
		public void say() {
			System.out.println(a);
		}
	}
	
}
问题描述:
	在这段代码中,假设我们在外部类的第二行执行a=20,修改a的值,程序将会报错,说明此时a默认是final修饰的常量,那么为什么会这样呢?
原因:
	因为类在编译的时候会编译成一个一个的class文件,那么为了保证内部类中的使用的变量与外部类中保持一致,那么系统自动将外部类中的成员变量自动变成final修饰的常量。

posted on 2021-03-13 17:14  黄文超  阅读(57)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3