关于Java内部类的小结

简介:

访问内部类的方法

OuterClassName ocn=new OuterClassName()

OuterClassName.InnerClassName in=ocn.new InnerClassName();

如果从外部类的非静态方法之外的任意位置创建内部类必须用以上方式

内部类可以访问其外围类中的所有成员,还拥有其外部类的所有元素的访问权,之所以这样是因为当用某一个外部类的对象创建一个内部类对象的时候,此时内部类对象就会捕获一个指向那个外围类对象的引用,那么当你访问外围类的成员的时候,就是用那个引用来选择外围类的成员的。

在内部类中生成外部类对象的引用需要用到OuterClassName.this,如果创建的是一个嵌套类(静态内部类),则不需要对外部类对象的引用

当一个内部类继承或者实现了一个接口或者抽象类或者普通类的时候,在使用new返回的时候会自动转为其基类或接口的引用了,且内部类作用域于它所定义的范围内。

匿名内部类的方式,在一个方法中直接new InnerClass{};此时同样会自动转型为其基类,它创建了一个继承名为InnerClass基类的匿名子类。在匿名类中,如果想引用外部定义的对象的时候,该对象必须定义为final类型,但是当对匿名内部类构造器传递参数的时候,此时就不必定义为final

Public Content getObject(int x)

{

  Returnnew Content(x){};

}

匿名内部类可以继承类,也可以实现类,但是就是不能同时兼备,并且只允许同时实现一个接口。

嵌套类,所谓的嵌套类其实就是静态内部类,也就是内部类前面加了static修饰符的。嵌套类和普通内部类的区别在于,普通内部类对象隐式的保存了一个引用,指向了创建它的外围类对象,而嵌套类创建的时候并不需要外部类的对象,同时它也只能访问外围类中的静态对象,普通内部类内部中不允许出现static修饰符的数据和字段,而嵌套类允许

可以在接口中定义内部类,不过此时该内部类就是一个publicstatic的嵌套类了。

内部类的好处,每个内部类都能独立的继承自一个接口的实现,它与外部类是否继承某个接口的实现无关,接口可以解决java中单继承的问题,而内部类可以有效的实现“多重继承”,意思就是当外部类需要继承多个非接口类型的时候,此时就可以利用内部类来实现一些继承操作。

10 内部类的继承,必须在继承中传递该内部类的外部类引用,在方法体中定义

outClassName.super(),当覆盖一个有内部类的外部类的时候,即使在子类创建重新定义此内部类,父类与子类的内部类依然是独立的,各自在自己外部类的命名空间中。

11 局部内部类,一般就是在方法体中定义一个局部内部类,此时该内部类不能有任何访问修饰符,因为它的作用域仅仅在于该方法体内部。但是它可以访问当前代码块内的常量和此外围类的所有成员。



本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1197899

相关文章
|
1月前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
12 0
|
1月前
|
Java 编译器
java中常见的几种内部类,你会几个?(未完)
java中常见的几种内部类,你会几个?(未完)
14 1
|
4月前
|
Java 数据安全/隐私保护
【零基础学Java】—内部类的概念与分类(三十)
【零基础学Java】—内部类的概念与分类(三十)
|
11天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
33 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
12天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
13天前
|
存储 Java
java接口和内部类
java接口和内部类
|
1月前
|
Java 编译器
详解java各种内部类
详解java各种内部类
|
1月前
|
设计模式 Java
JAVA内部类
JAVA内部类
10 1
|
2月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
38 9
|
4月前
|
Java
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
40 0

热门文章

最新文章