package org.lgy.study.innerclass; public class AnonymousTest{ public void test(Product p){ System.out.println("p.name = " + p.getName() + " p.price = " + p.getPrice()); } public static void main(String[] args){ final String str = "******"; AnonymousTest a = new AnonymousTest(); /* 匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。 匿名内部类不能是抽象类,也就是说匿名内部类必须实现它的抽象父类或接口里包含的全部抽象方法, 如果有需要,也可以重写父类中的普通方法。 匿名内部类不能定义构造器,但匿名内部类可以定义实例初始化块,通过实例初始化块来完成构造器需要完成的事情。 */ a.test(new Product(){ { System.out.println("init block"); //如果匿名内部类需要访问所在方法的局部变量,则必须使用final修饰符来修饰该局部变量。 System.out.println(str); } public String getName(){ return "CPU"; } public double getPrice(){ return 500.1; } }); } } interface Product{ public abstract String getName(); public abstract double getPrice(); }
package org.lgy.study.innerclass; public class AnonymousTest{ private String str1 = "!!!"; private static String str2 = "@@@"; /* 情况1:匿名内部类位于实例成员方法内 如果匿名内部类位于实例成员方法内,当调用匿名内部类所在的方法时必定已创建外部类对象, 所以在匿名内部类中可以访问外部类的所有成员(静态的、非静态的、成员变量、成员方法) */ public void method1(){ Product p = new Product(){ /* 匿名内部类中不能定义构造器、静态初始化块,因此不能再构造器、静态初始化块完成初始化, 但是匿名内部类中可以定义普通初始化块来完成初始化 */ { this.name = "CPU"; this.price = 500.0; } //匿名内部类中可以定义非静态成员(包括成员变量和成员方法) private String name; private double price; /* 匿名内部类中不能定义静态成员(包括成员变量和成员方法),但可以定义静态常量 private static String str = ""; public static void method(){} */ //匿名内部类中可以定义静态常量 private static final String str = "123"; public String getName(){ return name; } public double getPrice(){ return price; } //匿名内部类中可以定义自己的方法 public Product method(){ System.out.println(AnonymousTest.this.str1); System.out.println(AnonymousTest.str2); AnonymousTest.this.method3(); AnonymousTest.method4(); return this; } }.method(); System.out.println(p.getName()); System.out.println(p.getPrice()); } /* 情况2:匿名内部类位于静态方法内 如果匿名内部类位于静态成员方法内,当调用匿名内部类所在的方法时可能并没有创建外部类, 所以在匿名内部类中只能访问静态成员,不能访问非静态成员 */ public static void method2(){ Product p = new Product(){ /* 匿名内部类中不能定义构造器、静态初始化块,因此不能再构造器、静态初始化块完成初始化, 但是匿名内部类中可以定义普通初始化块来完成初始化 */ { this.name = "CPU"; this.price = 500.0; } //匿名内部类中可以定义非静态成员(包括成员变量和成员方法) private String name; private double price; /* 匿名内部类中不能定义静态成员(包括成员变量和成员方法),但可以定义静态常量 private static String str = ""; public static void method(){} */ //匿名内部类中可以定义静态常量 private static final String str = "123"; public String getName(){ return name; } public double getPrice(){ return price; } //匿名内部类中可以定义自己的方法 public Product method(){ //位于静态方法中的匿名内部类无法访问外部类中的非静态成员变量 //System.out.println(AnonymousTest.this.str1); System.out.println(AnonymousTest.str2); //位于静态方法中的匿名内部类无法访问外部类中的非静态成员方法 //AnonymousTest.this.method3(); AnonymousTest.method4(); return this; } }.method(); System.out.println(p.getName()); System.out.println(p.getPrice()); } public void method3(){ System.out.println("***"); } public static void method4(){ System.out.println("---"); } public static void main(String[] args){ new AnonymousTest().method1(); System.out.println("\n"); AnonymousTest.method2(); } } interface Product{ public abstract String getName(); public abstract double getPrice(); } /* 结果: !!! @@@ *** --- CPU 500.0 @@@ --- CPU 500.0 */
相关推荐
主要讲述了JAVA中内部类和匿名内部类的相关问题。
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
Anonymous inner classes 匿名内部类:匿名内部类是没有类名的局部内部类。 API 应用程序接口:提供特定功能的一组相关的类和方法的集合。 Array 数组:存储一个或者多个相同数据类型的数据结构,使用下标来...
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
内部类的相关知识-静态内部类,匿名内部类……内部类 静态内部类 匿名内部类 static inner
java内部类,相信很多人都使用过内部类,新建线程使用的匿名内部类,但是有很多人对内部类的一些概念处于模糊阶段,比如为什么方法内部类引用方法参数,方法参数必须设置为final,所以本文系统得整理了一下内部类...
相关android开发中内部类 匿名内部类 内部接口 对比说明
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
java中的匿名内部类总结
Java 匿名内部类的学习demo
在那些修改中,引人注目的是内部类和匿名类。如运用得当,它们可使程序更易理解和维护。本文介绍内部类和匿名类在Java代码中是如何具体工作的,如何正确使用它们,以及如何避免一些常见的错误。 下面来看看这些特性...
Android 匿名内部类作为事件监听类
使用swift匿名内部类,实现jave匿名内部类功能,java中的匿名内部类,可以做到的是,就是想要重写一个类中的方法,并且执行,但是不想重新定义一个类,因为只调用一次,或者调用多次,但是每次调用的实现过程都不同,这时候就...
java所需要的匿名内部类,Android开发有所帮助。
Java中的内部类和匿名类!
16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名...
匿名内部类详解.pdf
内部类和匿名类总结 写的比较详细,=有需要的可以看下