Java的(((φ(◎ロ◎;)φ))) 实例(成 员)内部类、局部内部类、匿名内部类和静态内部类。

关于让你晕头的Java类

Biu~~~~~~~~~~~~~~~~~~~~????′éaé???è?¨??|é???gif??è?¨????è?????~~~~~~~~~~~~~~~~~~~~~~pia!

# 梳理一下 # 前言

Java里有各种各样的类、例如内部类、本地类、局部类、静态类、、、、其实有些指的是一个/只不过在英文翻译成中文时采用的意思不同,这让我想起我的弟弟在阅读鲁滨逊漂流记时 问我 这个主人公到底叫什么 我告诉这位六年级的小朋友 他叫Robinson 只不过不同的译者翻译不同 你可以叫他鲁滨逊、鲁宾逊、鲁宾孙、罗宾森、、、好回到正题


一、直接***

总结

  1. 一个 .java 文件内有且仅有一个 public 修饰的类也就是主类而其他不能用不能用public修饰的也不再类里面的就叫做 “文件类”(例如下面的 classD)这种文件类和主类关系最小(所以你很少听到这个名词)
public class Main{// 只能放public abstract final这三种修饰符
}
class TestD {
	// 文件类默认只能是包访问权限,即:不是同一个包的是无法引入和使用的。
	// 默认是default-另外三种访问修饰符不可用
}
  1. 上面是类外面的类,反之,嵌套类,定义在类里的任意地方
    嵌套类是一个宽泛的概念(下面继续细分)
    它可以根据static 关键字的有无 分为 静态嵌套类、非静态嵌套类
    // 静态类的实例不需要先实例化外部类成员,可直接实例化。
//对于上面加粗黑体字解释
public class TestC {
	static class TestC11 {}
	class TestC22 {}
	public static void main(String[] args) {
		TestC11 t11 = new TestC11();//静态类的实例化
		TestC c = new TestC();
		TestC22 t22 = c.new TestC22();//非静态的实例化--现实例化外部类
	}
public class Main{
		// 1.静态嵌套类(static)==四种访问修饰符均可用,但官方给黄色警告
		// -The type TestC.TestC1 is never used locally---
		static class TestC1 {
//这不就是静态内部类吗,这种类确实,形式上是在一个类里面,应该给他一个内部类的名分
		}
}
  1. 相对于里面的嵌套类,外面的类就是外部类(即上面的Main)
  2. 静态嵌套类其实就是 广义上的内部类之一的静态内部类 这种类你可以理解为相当于一个类的静态成员
    故不能在静态嵌套类里访问外部类的非静态的东西
  3. 非静态嵌套类就是狭义上的内部类( 成员内部类、局部内部类、匿名内部类。)
  4. 他们三位内部类共有的特性
    内部类中不能有静态static修饰的成员(比如代码块、字段、方法、接口等),总之不能有static关键字,除了一种情况可以有,那就是静态常量,
public class TestC {
	// 此处以成员内部类为例
	public class TestC2 {// 四种访问修饰符均可使用
//		The method t1 cannot be declared static; static methods can only be declared in a static or top level type
		//static void t1() {}
		//Cannot define static initializer in inner type TestC.TestC2
//		static {}
		static final int a = 10;

	}
}

  1. 局部内部类亦是局部嵌套类,是定义在代码块中、方法中、构造器中,局部类只在本块(也就是最近的一对大括号内{})范围内有效。abstract、
    final可以修饰局部内部类
  2. 成员内部类对于那四种修饰符(public /protected/default/private)都是可用的,位于类内 但不位于块内方法内,不然成为局部内部类
  3. 匿名类,没有名称的类,没有名称也就是其他地方就不能引用,不能实例化,只用一次,当然也就不能有构造器

2.细枝末节

匿名类不能使用任何关键字和访问控制符,匿名类和局部类访问规则一样,只不过内部类显式的定义了一个类,然后通过new的方式创建这个局部类实例,而匿名类直接new一个类实例,没有定义这个类。匿名类最常见的方式就是回调模式的使用,通过默认实现一个接口创建一个匿名类然后,然后new这个匿名类的实例。
/ / (在执行实例内部类的方法时)当 实 例 ( 成 员 ) 内 部 类 拥 有 和 外 部 类 同 名 的 成 员 变 量 或 者 方 法 时 , / / 会 发 生 隐 藏 现 象(有点类似 就近原则) , 即 默 认 情 况 下 访 问 的 是 成 员 内 部 类 的 成 员 : / / 如 果 要 访 问 外 部 类 的 同 名 成 员 , 需 要 以 下 面 的 形 式 进 行 访 问 : / / 外 部 类.this. 成 员 变 量 / / 外 部 类.this.成 员 方 法
匿名 内 部 类 适 合 创 建 那 种 只 需 要 一 次 使 用 的 类 , / / 定 义 匿 名 内 部 类 的 语 法 格 式 如 下 : / / new 父 类 构 造 器 ( 实 参 列 表 ) | 实 现 接 口 (){ / / 匿 名 内 部 类 的 类 体 部 分 } / / 从 定 义 格 式 可 看 出 , / / 匿 名 内 部 类 必 须 继 承 一 个 父 类 , 或 实 现 一 个 接 口 , / / 但 最 多 只 能 继 承 一 个 父 类 , 或 实 现 一 个 接 口 。 (有且仅有1个) / / 匿 名 内 部 类 两 条 规 则 : / / 1 . 不 能 是 抽 象 类 。 / / 2 . 不 能 定 义 构 造 方 法 。 / / 由 于 匿 名 内 部 类 没 有 类 名 , 所 以 无 法 定 义 构 造 器 , / / 但 匿 名 内 部 类 可 有 初 始 化 块 ( 代 码 块 ) , / / 可 以 通 过 初 始 化 块 来 完 成 构 造 器 需 要 完 成 的 工 作 。

小试牛刀

这道题就小试牛刀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值