作者:Flyingis
内部类是Java语言一个重要的基本特性,在Java开发的许多领域都会经常用到。内部类的定义说简单一点就是将一个类定义在另外一个类的内部。内部类允许你把一些逻辑相关的类组织在一起,控制内部类代码的可视性,它和类的组合是完全不同的概念。内部类主要有以下比较关键的特性:<!----><o:p></o:p>
<o:p> </o:p>
1. 普通的非内部类不能被声明为private或protected,否则就失去了创建该类的意义。但是内部类通常可以被声明为private或protected类型,因为这样可以防止他人对该内部类实现的功能进行修改,达到隐藏实现细节的目的。例如:<o:p></o:p>
class Fruit {<o:p></o:p>
private class Weight {<o:p></o:p>
private String i;<o:p></o:p>
private Weight(String j) {<o:p></o:p>
i = j;<o:p></o:p>
}<o:p></o:p>
public String read() {<o:p></o:p>
return i;<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
class test {<o:p></o:p>
public static void main(String[] args) {<o:p></o:p>
Fruit f = new Fruit();<o:p></o:p>
f.Weight w = f.new Weight(); //不能访问private类,如果Weight为protected类型则可以<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
2. 在方法或某控制语句(if/for/while等)的作用域内定义内部类,将只能在该范围内调用内部类的方法和成员变量。<o:p></o:p>
3. 匿名内部类是一种特殊的内部类,如果希望它使用一个在其外部定义的对象,那么编译器会要求其参数引用是final的。<o:p></o:p>
public class Fruit {<o:p></o:p>
public Tea cont(final int j) {<o:p></o:p>
return new Tea() {<o:p></o:p>
private int i = j;<o:p></o:p>
public int read() {<o:p></o:p>
return i;<o:p></o:p>
}<o:p></o:p>
}; //注意这里的分号<o:p></o:p>
}<o:p></o:p>
public static void main(String[] args) {<o:p></o:p>
Fruit f = new Fruit();<o:p></o:p>
Tea t = f.cont;<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
而当方法cont(final int j)中的参数j只是被传递到匿名类中的构造器时,可以不用被声明为final类型,如return new Tea(j)。这里提到了匿名内部类的构造器,那么它是怎么被初始化的呢?<o:p></o:p>
public class Fruit {<o:p></o:p>
public Tea cont(int j) {<o:p></o:p>
return new Tea(j) {<o:p></o:p>
System.out.println(j);<o:p></o:p>
}; <o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
还可以这样初始化匿名内部类:<o:p></o:p>
public class Fruit {<o:p></o:p>
public Tea cont(final int j) {<o:p></o:p>
return new Tea(j) {<o:p></o:p>
int i;<o:p></o:p>
// 初始化匿名内部类<o:p></o:p>
{<o:p></o:p>
i = j;<o:p></o:p>
System.out.print(i);<o:p></o:p>
}<o:p></o:p>
}; <o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
方法cont()可以被称为实例初始化方法,使得匿名内部类通过构造器而被初始化,在实际应用中,我们不能重载实例初始化方法,因为匿名内部类只能有一个构造方法。
分享到:
相关推荐
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
Java 内部类是 Java 语言的一个重要特性,允许在一个类的定义内嵌套其他类。这使得 Java 能够实现一些特殊的编程模式,比如模拟多重继承和解决多次实现问题。内部类根据其定义的位置和用途,可以分为四种类型:成员...
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...
Java内部类是Java语言提供的一种独特特性,它允许我们在一个类的定义内部定义另一个类。这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"java内部类使用...
Java 内部类是Java语言特性中的一个重要组成部分,它允许我们在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现复杂逻辑和封装上具有很大的灵活性。下面我们将详细...
### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高...希望本文能帮助开发者更好地理解和应用Java内部类的相关知识。
本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
Java 内部类是 Java 语言的一个重要特性,它允许在一个类的内部定义另一个类。内部类的概念在 Java 中有着广泛的应用,特别是在处理复杂的继承问题和实现特定设计模式时。以下将详细介绍 Java 内部类的基本概念、...
Java内部类是Java语言中一个独特且强大的特性,它允许在一个类的定义内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java内部...
#### 一、静态内部类概念与特性 在Java编程语言中,静态内部类(也被称为嵌套类)是一种特殊的内部类形式,它通过`static`关键字来定义。与普通内部类相比,静态内部类具有以下显著特点: 1. **创建对象无需依赖...
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态...
Java内部类是Java编程语言中的一个特色特性,它允许在一个类的定义内部定义另一个类。这种设计模式在处理一些特定的复杂情况时非常有用,比如实现事件监听、封装临时对象或者创建私有辅助类等。以下是对Java内部类的...
Java集合框架是Java编程...总之,这个资料包涵盖了Java集合框架和内部类的基础知识,对于想要深入理解Java编程的开发者来说,是一份宝贵的学习资源。通过学习,你可以提升在处理数据集合和实现复杂设计模式上的能力。
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以作为外部类的成员,具有访问外部类的所有域的权限,无论是public、protected还是private。这种访问能力使得内部类能...
Java内部类是Java语言中一个独特且强大的特性,它允许在一个类的定义内部定义另一个类。内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。本文主要讨论非静态内部类(也称为实例内部类)的...
学习“Java4Android 35_内部类和匿名内部类”这个教程,开发者将掌握如何有效地利用内部类和匿名内部类,提升代码的结构和功能,特别是在Android应用开发中,这两个特性对于构建组件和事件处理尤为重要。通过观看...
Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义单独类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的需求。在Java编程中,匿名内部类主要用于事件处理、回调...