匿名类特点
1 匿名类本身没有构造方法,但是会调用父类的构造方法。
2 匿名类尽管没有构造方法,但是可以在匿名类中提供一段实例初始化代码。Java虚拟机会在调用了父类的构造方法后,执行这段代码。实例化代码和构造方法有同样的效果,前者允许被重载,匿名类实例只能有一种初始化方式。
publicclass A {
A(int v) {
System.out.println("参数构造函数");
}
A()
{
System.out.println("默认构造函数");
}
void method(){System.out.println("mehtod from A");}
publicstaticvoid main(String[] args) {
new A().method();
A a =new A() //匿名类
{
void method()
{
System.out.println("from 匿名类");
}
};
a.method();
System.out.println("===================================");
int v=3;
A aa=new A(v) //匿名内部类调用父类的构造方法
{
void method()
{
System.out.println("from 匿名类");
}
};
aa.method();
System.out.println("*******************************");
finalint vv=3;//必须定义为final
A aaa=new A(v)
{
{//实例化初始代码
};
void method()
{
System.out.println("from 匿名类"+vv);
}
};
aaa.method();
}
}
3 在声明成员变量时定义匿名类
Abstract class A
{
A a = new A()
{
Void mehtod(){//代码}
}
Abstract void method();
}
4 匿名类还可以实现接口
Thread t = new Thread(new Runnable()
{
Public void run(){//代码实现}
}
);
5 匿名内部类和局部内部类一样,可以访问外部类的所有成员。如果一个内部类中位于一个方法中还能访问所在方法的final类型的变量和参数。
6 局部内部类的名字在方法是不可见的,因此和匿名类一样,能够起到封装类型名字的作用。局部内部和匿名内部类的区别:
1 匿名内部类的程序代码比较简短
2 一个局部类可以有多个重载的构造方法,并且客户类可以多次创建局部类实例,而匿名类没有重载的构造的构造方法并且只能创建一次实例。
内部类中的接口和接口中的内部类:
publicclass Outer {
//定义接口
publicstaticinterface Tool{
publicint add(int a,int b);
}
//匿名内部类
private Tool tool =new Tool()
{
publicint add(int a,int b)
{
return a+b;
}
};
publicvoid add(int a,int b)
{
this.tool.add(a, b);
}
publicvoid setTool(Tool tool)
{
this.tool=tool;
}
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
//实现类中的内部接口。
class MyTool implements Outer.Tool
{
publicint add(int a, int b) {
System.out.println(a+b);
return a+b;
}
}publicinterface InterfaceA {
//在接口中定义静态内部类此时静态内部类位于接口的命名空间中
staticclass B {
};
//class F{}
publicvoid method(B b);
}
class C implements InterfaceA {
//因为C类实现InterfaceA 类B对于C可见
B b = new B();
publicvoid method(B b) {
}
}
class D {
//但是在类D中必须是下面这种新式访问。
InterfaceA.B a = new InterfaceA.B();
// B b =new B();//编译错误
}
内部类的用途
1 封装类型
顶层类只能处于public 和默认访问级别,而成员内部类可以处于public,protected private 默认访问级别。如果一个内部类仅仅为特定的方法提供服务,那么可以把这个内部类定义在方法之类。
2 直接访问外部类的成员
3 回调外部类的方法
内部类的类文件:
命名规则成员内部类:外部类名字$内部类名字
局部内部类:外部类名字$数字$内部类名字
匿名类:外部类名字$数字。
相关推荐
### 内部类的相关知识-静态内部类,匿名内部类…… #### 一、内部类概述 内部类(Inner Class)是 Java 中一种特殊类的定义方式,它允许在一个类的内部定义另一个类。这种设计模式提供了更为灵活的编程机制,可以...
- 匿名内部类没有名字,可以直接实例化一个接口或者继承一个非抽象类。但是,匿名内部类不能继承其他类,但可以实现一个或多个接口。 3. **Static Nested Class 和 Inner Class**: - 静态内部类(Static Nested ...
内部类分为四类:非静态成员内部类、静态成员内部类、局部内部类和匿名内部类。接下来将逐一介绍这四种类型的内部类。 #### 二、非静态成员内部类 非静态成员内部类是最常见的一种内部类形式,它具有以下特点: 1...
Java 中的内部类和匿名类是非常重要的知识点,它们可以让你更优雅地设计你的程序结构。内部类可以隐藏你不想让别人知道的操作,提高程序的安全性和可维护性。匿名类可以用来实现一些简单的接口或抽象类,提高程序的...
总结一下,Java中的匿名内部类提供了一种简洁的方式来实现接口或扩展已有类,常用于事件处理、回调函数以及在特定场景下替代新的类定义。同时,了解Java Web开发中的Cookie、Session、localStorage和sessionStorage...
- 内部类:在类内部定义的类,包括成员内部类、局部内部类、匿名内部类等。 - 集合框架:如ArrayList、Vector、LinkedList、HashSet、TreeSet、LinkedHashSet、HashMap等,用于存储和操作对象。 - 泛型:提供类型...
根据定义的位置,内部类可以分为四种类型:成员内部类、局部内部类、静态内部类和匿名内部类。 1. **成员内部类** - 成员内部类就如同外部类的成员一样,与成员变量和成员方法处于同一级别。 - 声明:`public ...
在 `InOut` 类中,`amethod` 方法定义了一个匿名内部类,它可以访问外部类的实例变量,包括私有变量。如果内部类定义在方法内部,它还可以访问该方法的局部变量,但这些变量必须声明为 `final`。这意味着它们是常量...
根据位置和使用方式,内部类主要分为四种类型:成员内部类、静态嵌套类(静态内部类)、方法内部类和匿名内部类。 1. 成员内部类:这类内部类是作为外部类的成员存在的,与字段和方法处于同一级别。成员内部类的...
3. **匿名内部类:** - 不需要名称,常用于实现接口或继承抽象类的场合。 #### 七、异常处理 1. **异常概述:** - 异常是在程序执行过程中发生的事件,可能中断正常的指令流程。 - Java中的异常处理机制主要...
匿名内部类是一种没有名字的内部类,常用于简化代码编写,特别是创建接口的实例时。 - **示例代码**: ```java interface MyInterface { void doSomething(); } public class Main { public static void main...
下面我们将详细探讨Java匿名内部类的相关知识点。 1. **什么是匿名内部类**: 匿名内部类,正如其名,是没有名字的内部类。它没有类名称,而是直接在需要使用的地方被定义,并且通常只被使用一次。这使得它可以...
首先,内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。在给定的代码示例中,我们看到的是成员内部类的应用。成员内部类就像普通的类成员,可以访问外部类的所有成员,包括私有成员。在 `...
3. **匿名内部类**:没有名字的内部类,通常用于创建简短的、一次性使用的类。 4. **静态内部类**:可以被静态地实例化,无需对外部类的引用。 内部类的最大优点是可以访问外部类的私有成员,包括字段和方法,这...
### JavaSE基础知识总结 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java语言的设计目标之一是易于理解和使用,它的语法清晰、简洁。 - **面向对象:** Java是一种纯面向对象的语言,支持封装...
根据其位置,内部类可以分为成员内部类、局部内部类、匿名内部类以及静态内部类。成员内部类就像外部类的成员,可以访问外部类的所有成员(包括私有成员)。局部内部类只存在于方法或作用域内,它的生命周期仅限于该...
3. **匿名内部类(Anonymous Inner Classes)**: - 匿名内部类是一种没有名字的内部类,通常用于实现接口或继承一个抽象类。 - 这种类没有显式的名字,因此不能被重复使用。 - 匿名内部类通常用于简化代码,特别...
当只需要用到接口的一个方法,且不需要长期保存该对象时,可以创建一个匿名内部类,直接实现接口并立即调用方法: ```java Button button = new Button() { public void onClick() { System.out.println("Button ...