内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可以是静态static的,也可用public,default,protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。
一、内部类的作用
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
二、内部类的访问方式
程序编译过后会产生两个.class文件,分别是Out.class和Out$In.class。其中$代表了上面程序中Out.In中的那个 .
Out.In in = new Out().new In()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意
1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中
2.必须先有外部类的对象才能生成内部类的对象,因为内部类的作用就是为了访问外部类中的成员变量
三、内部类的访问控制
内部类的访问控制包括public、protected、default、private。而普通类(非内部类)的访问控制仅仅有public和友好类型。有关访问控制方面的内容,请看第二篇中的java访问控制。
四、内部类按作用域分类
1、成员内部类
注意:①成员内部类中,不能定义静态成员
2、局部内部类
注意:①如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
注意:①静态内部类可以用public,protected,private修饰
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
注意:①留意外部类的方法的形参,当所在的方法的形参需要被内部类里面使用时,该形参必须为final。这里可以看到形参name已经定义为final了,而形参city 没有被使用则不用定义为final。(具体原因比较复杂呢,需要了解java的编译机制,可以参考:http://android.blog.51cto.com/268543/384844/)
可以看到子类的构造函数里面要使用父类的外部类对象.super();而这个对象需要从外面创建并传给形参。
五、总结
内部类在java web编程中很少使用,但是在swt编程中使用较多。因此我们还是需要认证查看一下内部类的有关知识。
六、参考
1、think in java 4th
2、http://blog.sina.com.cn/s/blog_56898c310100a3i3.html
3、http://www.cnblogs.com/nerxious/archive/2013/01/24/2875649.html
4、http://android.blog.51cto.com/268543/384844/
相关推荐
本文将围绕Java内部类进行深入探讨,包括内部类的基本概念、创建方式、访问控制以及一些高级用法。 #### 一、内部类概述 Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态...
本篇文章将深入探讨Java内部类的应用,包括其分类、用法以及优缺点。 一、内部类的分类 Java内部类主要分为以下四种类型: 1. 成员内部类:这是最常见的内部类形式,它作为外部类的一个成员,可以在外部类的任何...
下面我们将详细探讨成员内部类、方法内部类和静态内部类这三种类型的内部类。 一、成员内部类 成员内部类,顾名思义,就像类的其他成员(如字段和方法)一样,存在于类的主体中。成员内部类可以直接访问外部类的...
在这个"java内部类使用例子"中,我们将深入探讨这些类型,并通过实际代码来理解它们的工作原理。 首先,成员内部类是在外部类的成员位置定义的类,它可以访问外部类的所有成员,包括私有成员。成员内部类的实例与...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...
本篇文章将深入探讨Java内部类的种类、用法及其优势。 1. **内部类的种类**: - **成员内部类**:定义在类的主体中的类,可以是静态或非静态的。非静态内部类(也称为实例内部类)与外部类的实例紧密关联,而静态...
本资料"java内部类详解共10页.pdf.zip"显然是一个详细探讨Java内部类的教程,包含10页内容。虽然无法在这里直接提供PDF的具体内容,但我们可以根据通常内部类的讲解内容进行详述。 1. **什么是内部类:** 内部类...
Java内部类是Java语言中一个独特且强大的特性,它允许在一个类的定义内定义另一个类。内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。下面我们将深入探讨内部类的使用方法和优势。 首先...
本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们。 **内部类** 内部类,也称为嵌套类,是在另一个类的定义内部声明的类。它有以下几种类型: 1. **成员...
通过本文,我们将深入探讨Java内部类的四个典型应用场景,并对每个场景进行详细分析,帮助初学者更好地理解并运用这一特性。 #### 二、Java内部类简介 Java中的内部类分为静态内部类(Static Inner Class)和非...
本测试程序旨在深入探讨Java内部类的各种类型和用法,包括成员内部类、局部内部类、匿名内部类以及静态内部类。 一、成员内部类 成员内部类就像是外部类的一个普通成员,可以访问外部类的所有成员(包括私有成员)...
### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...
总结,这个实验报告深入浅出地介绍了Java内部类的概念及其使用,以及异常处理的基本思想,通过实际的编程练习,有助于提高学生的编程技能和问题解决能力。通过扩展内部类的应用和异常处理的实践,学生可以更好地理解...
Java内部类是一种定义在另一个类内部的类,它可以访问外部类的所有成员,包括私有成员。内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的...
在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不持有对外部类的引用,因此它可以在没有外部类对象的情况下被实例化。这与非静态内部类不同,后者必须依附于外部类的实例。静态内部类可以...
"Java源码查看内部类信息"这个主题主要探讨了如何查看和理解Java源码中的内部类结构。 首先,内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像是外部类的一个成员,它可以访问...
本文将深入探讨Java中的四种内部类:非静态内部类、静态内部类、局部内部类和匿名内部类。 1. 非静态内部类(也称为成员内部类) 非静态内部类是定义在外部类的成员位置的类,它可以访问外部类的所有成员,包括私有...
Java内部类是Java编程语言中的一个独特特性,它允许在一个类的定义内部定义另一个类。这种设计模式在处理复杂的对象关系、实现匿名类以及提供更好的封装性时非常有用。在这个"JAVA_12内部类"的学习资料中,我们将会...