java 内部类

Posted wbyixx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 内部类相关的知识,希望对你有一定的参考价值。

 

内部类

顾名思义,内部类就是在内部定义的类

内部类将类置于其他类的内部。看起来像一种代码隐藏机制。

内部类了解外围类,并能与之通信。

用内部类写出的代码更加优雅而清晰。

 

创建内部类

直接在类里面写类的定义即可

 

内部类的访问特点

内部类可以直接访问外部类的成员,包括私有

外部类要访问内部类的成员,必须创建对象

外部类名.内部类名    对象名 = 外部类对象.内部类对象

 

链接到外部对象

当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,

所以它能访问其外围对象的所有成员,而不需要任何特殊条件。

此外,内部类还拥有其外围类的所有元素的访问权。

当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。

然后,在访问外围类成员时,就是用那个引用来选择外围类的成员。

 

内部类的对象只能在与其外围类的对象相关联的情况下才能被创建。

构建内部类对象时,需要一个指向外围类对象的引用。

 

.this与.new

如果需要生成对外部类对象的引用,可以使用外部类名字后面紧跟圆点和this。

如果想告知某些其它对象,去创建其某个内部类的对象。可以使用其他外部类对的引用根圆点和new 

 

在拥有外部类对象之前是不可能创建内部类对象的。

因为内部类对象会暗暗地连接到它的外部类对象上。

但是如果全是嵌套类(静态内部类),那就不需要对外部类对象的引用。

 

内部类与向上转型

当将内部类向上转型为其基类,尤其是转型为一个接口的时候,内部类很有用。

从实现了某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。

这是因为此内部类---某个接口的实现---能够完全不可见,并且不可用。

所得到的只是指向基类或接口的引用,所以能够很方便地隐藏实现细节。

 

当取得了一个指向基类或接口的引用时,甚至可能无法找出它的确切的类型。

 

private内部类可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。

从客户端程序员的角度来看,由于不能访问任何新增加的、原本不属于公共接口的方法,

所以扩展接口是没有价值的。这也给java编译器提供了生成更搞笑代码的机会。

 

在方法和作用域内的内部类

如果实现了某类型的接口,于是可以创建并返回对其的引用

要解决一个复杂的问题,想创建一个类来辅助解决,但又不希望这个类是可共用的。

 

一个定义在方法中的类

一个定义在作用域中的类,此作用域在方法的内部

一个实现了接口的匿名类

一个匿名类,它扩展了有非默认构造器的类

一个匿名类,它执行字段初始化

一个匿名类,它通过实例初始化实现构造(匿名类不可能有构造器)

 

匿名内部类

匿名内部类是局部内部类的一种,是一种简化的写法。

前提是存在一个类或者接口。这里的类可以是具体类也可以是抽象类

本质是一个继承了该类或实现了该接口的子类匿名对象

 

嵌套类

如果不需要内部类对象与其外围类对象之间有联系,可以将内部类声明为static。

这样的内部类称为嵌套类。

当内部类是static时:

  要创建嵌套类的对象,并不需要外围类的对象

  不能从嵌套类对象中访问非静态的外围类对象

普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类,

但是嵌套类可以包含以上的东西。

嵌套类不保留外部类的this引用,类似一个static方法

 

嵌套类可以作为接口的一部分。

 

内部类的继承

 

内部类可以被覆盖吗

 

局部内部类

 

内部类标识符

以上是关于java 内部类的主要内容,如果未能解决你的问题,请参考以下文章

java的内部类与匿名内部类

JAVA基础——内部类详解

Java_内部类

Java 内部类

java内部类与匿名内部类作用分别是啥?

Java内部类