Java 嵌套类其实平时很少用,常见的是在多线程和事件处理(例如 Swing,xml 解析)时才需要用到。这里总结一下嵌套类的一些特性。
嵌套类的定义
- 在一个类中定义的类,就称为嵌套类 (nested class)。嵌套类分为两大类,静态嵌套类 (static nested class) 和非静态嵌套类 (non-static nested class),非静态嵌套类也叫内部类 (inner class)。
- 定义嵌套类时可以使用任意访问修饰符 (private, protected, public, 默认),不同于普通类只能使用 public 或者默认。
使用嵌套类的原因
- 嵌套类可作为一种类的逻辑分组方式。例如类 B 只对类 A 有用,那么将 B 作为 A 的内部类更合适。
- 更好的封装。例如上述类 A 和 B,如果 B 是内部类,就可以直接访问 A 的成员。
静态嵌套类
- 静态嵌套类实际上跟一个普通的类一样,只是因为有利于类的逻辑分组而使用。
内部类
- 内部类跟类的成员相似,可以访问其它类成员(变量或方法)。一个内部类的实例必须存在其外部类的一个实例中。内部类不能有静态成员(静态成员只能在顶级类或静态嵌套类中声明)。
- 内部类出现跟外部类成员变量同名的变量时,默认访问内部类成员,但可以用 "外部类名.this.变量名" 来访问同名的外部类成员。
- 在方法内定义的类称为本地内部类 (local inner class)。
- 如果一个内部类是一个子类(继承了父类或者实现了接口),它可以没有类名,这样的类称为匿名内部类或匿名类 (anonymous [inner] class)。
Outer outer = new Outer();
Inner inner = outer.new Inner(); // 内部类的实例化
匿名类
- 匿名类不能定义构造方法(因为它没有类名),但可以使用初始化块 (initialization block) 进行初始化。如果它继承自某个类,则新建实例时可以调用父类的构造方法(但不能重写)。
- 匿名类如果处于方法内,则使用其包围方法的局部变量时,这个变量必须声明为final。而使用其外部类的成员时则没有这个限制。
// 匿名类例子
public class AnonymousClassTest {
private String str = "outer str";
public static void main(String[] args) {
Base base = new AnonymousClassTest().getBase();
base.print();
}
public Base getBase() {
return new Base(5) { // 匿名类,调用父类的构造函数
private String str = "inner str"; // 跟外部类成员变量同名
{
i = 10; // 可以在初始化块中进行必要的初始化
}
public void print() {
System.out.println("Anonymous print(), i = " + i +
", str = " + AnonymousClassTest.this.str); // 访问同名的外部类成员
}
};
}
}
abstract class Base {
protected int i;
public Base(int i) {
System.out.println("Base Constructor, i = " + i);
}
public abstract void print();
}
参考资源
http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
http://www.java2s.com/Tutorial/Java/0100__Class-Definition/0201__Anonymous-inner-class.htm
分享到:
相关推荐
Java 嵌套类和内部类详解 Java 中的嵌套类和内部类是指在一个类的内部定义另一个类,这种类称为嵌套类(nested classes)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,非静态嵌套类也即被称...
在给定的文档中,讨论的是如何从Java嵌套类中访问外部类的成员以及一些相关的概念。 首先,嵌套类分为两种主要类型:静态嵌套类(也称为内部静态类)和非静态嵌套类(也称为实例内部类)。非静态嵌套类可以访问外部...
深入理解Java嵌套类和内部类 Java 嵌套类(nested classes)是指在一个类的内部定义另一个类,这种类有两种类型:静态嵌套类和非静态嵌套类。非静态嵌套类也称为内部类(inner classes)。在Java中,嵌套类从JDK1.1...
在Java语言中,嵌套类(Nested Classes)是Java语言规范中定义的术语,指的是在其他类或接口的主体内部声明的类。嵌套类可以细分为多种类型,每种类型都有其特点和使用场景。 首先,根据嵌套类定义的位置,可以将...
### Java嵌套类详解 #### 一、嵌套类(Nested Class)概述 嵌套类是一种在Java中非常有用的特性,允许开发者在一个类或者接口的内部定义另一个类。这种结构可以增强代码的组织性和封装性。 ##### 1.1 嵌套类的...
java 嵌套接口 程序 学习java必须要学习的经典案例,加油学习把
Java中的嵌套类是一种强大的特性,它允许在一个类的内部定义另一个类。这种设计模式提供了更高的封装性和灵活性,尤其在处理复杂的数据结构和算法时。本文将深入探讨嵌套类的详解及其实例代码。 首先,我们要区分两...
Java中的嵌套类和内部类是面向对象编程中一种特殊的类定义方式,允许在一个类的定义内部创建另一个类。这种特性使得代码结构更加紧凑,同时也提供了更高级别的封装和抽象。在Java中,嵌套类分为静态嵌套类和非静态...
19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的...
例如,如果`InnerObject`还包含另一个嵌套的JSON对象,只需在Java类中添加相应的字段并定义相应的getter和setter即可。`ObjectMapper`会根据JSON结构解析并填充Java对象。 5. **反向操作:Java对象转JSON** 除了将...
Java和Kotlin是两种在移动开发领域广泛应用的编程语言,尤其在Android开发中占据主导地位。内部类和静态嵌套类是...在提供的资源中,"java内部类嵌套类"和"kotlin内部类嵌套类"的示例代码将帮助你进一步巩固这些概念。
例如,如果有一个表示组织结构的类,其中包含子组织的列表,我们可以使用递归或嵌套循环来遍历整个结构: ```java public void traverseOrganization(Organization org) { // 处理当前组织 processOrganization...
本Java精华内容深入Java API、嵌套类和内部类、与时间有关的类Date,DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及...
这是一个关于Java的for语句嵌套练习,可以打印出各种星型,供大家学习,很有意思哦~~
### Java静态内部类(嵌套类)详解 #### 一、静态内部类概念与特性 在Java编程语言中,静态内部类(也被称为嵌套类)是一种特殊的内部类形式,它通过`static`关键字来定义。与普通内部类相比,静态内部类具有以下...
总结来说,`try-catch`嵌套在Java中用于更精细化的异常处理,允许我们针对不同类型的异常执行不同的恢复策略。通过这种方式,我们可以编写更健壮、更易维护的代码,确保程序在面对错误时能够优雅地处理并继续运行。
当JSON数据包含嵌套的对象时,我们需要创建对应的Java类来存储数据。例如,对于上面的JSON,我们可以创建两个类:`MainObject`和`SubObject`。 ```java public class MainObject { private String key1; ...
Java开发中嵌套类的详解及实例 嵌套类是Java语言中的一种特殊的类,定义在另一个类或接口内部。嵌套类可以分为三种类型:成员嵌套类、局部嵌套类和匿名嵌套类。 1. 成员嵌套类(Member Nested Class) 成员嵌套类...
详解Java中的嵌套类与内部类 Java中的嵌套类与内部类是 Java编程语言中的一种重要概念,它们在Java程序设计中扮演着重要角色。下面我们将详细介绍Java中的嵌套类与内部类。 嵌套类(Nested Class)可以在一个类...
在Java应用中,使用FreeMarker导出Word文档时,经常会遇到列表(list)的嵌套问题,这涉及到数据模型构建、模板设计以及Word文档的格式化。下面我们将详细探讨这个主题。 1. **FreeMarker简介** FreeMarker是一个...