`

Anonymous Inner Class (匿名内部类)

阅读更多
匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.

一、由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。

二、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。

三、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。

new <类或接口> <类的主体>

匿名类

匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。

这就要采用另一种形式的new语句,如下所示:


new <类或接口> <类的主体>

这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。

如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。

注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。

如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其适合在Swing应用程序中快速创建事件处理程序。

exp:
Java代码

   1. return new Contents() { 
   2. private int i = 11; 
   3. public int value() { return i; } 
   4. }; 

return new Contents() {
private int i = 11;
public int value() { return i; }
};



这种奇怪的语法要表达的意思是:“创建从Contents衍生出来的匿名类的一个对象”。由new表达式返回的句柄会自动上溯造型成一个Contents句柄。匿名内部类的语法其实要表达的是:

class MyContents extends Contents {
private int i = 11;
public int value() { return i; }
}
return new MyContents();
若试图定义内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象必须是final属性.
Java代码

   1. public class Parcel9 { 
   2. public Destination 
   3. dest(final String dest, final float price) { 
   4. return new Destination() { 
   5. private int cost; 
   6. // Instance initialization for each object: 
   7. { 
   8. cost = Math.round(price); 
   9. if(cost > 100) 
  10. System.out.println("Over budget!"); 
  11. } 
  12. private String label = dest; 
  13. public String readLabel() { return label; } 
  14. }; 
  15. } 
  16. public static void main(String[] args) { 
  17. Parcel9 p = new Parcel9(); 
  18. Destination d = p.dest("Tanzania", 101.395F); 
  19. } 
  20. }  
分享到:
评论

相关推荐

    java易混淆概念Anonymous Inner Class

    java易混淆的地方,final, finally, finalize的区别,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类

    Java面试题,他会给你很好的Java面试准备,第一,谈谈final, finally, finalize的区别,第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    Anonymous inner class1---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    Java面试大合集

    匿名内部类是没有名字的内部类。不能extends继承其他类,但一个内部类可以作为一个接口,由另一个内部类实现。 final, finally, finalize 的区别 1. final—修饰符(关键字)如果一个类被声明为final,意味着它不...

    Anonymous inner class3---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    匿名内部类

    所谓匿名内部类(anonymous inner class),是指可以利用内部类创建没有名称的对象,它一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类内的成员,这种类不取名字,而是直接用其父类的名字或者它所...

    java日常词汇学习

     Anonymous inner classes 匿名内部类:匿名内部类是没有类名的局部内部类。  API 应用程序接口:提供特定功能的一组相关的类和方法的集合。  Array 数组:存储一个或者多个相同数据类型的数据结构,使用下标来...

    匿名内部类代码

    the different code of create factory.

    Anonymous inner class2---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    java基础知识

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java笔试题,java程序员常见的笔试

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    JAVA面试题149例

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java面试笔试题大汇总+很全面.txt

     第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?   第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 ...

    java整理试题

    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&...

    Java面试经典试题及答案.doc

    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,...

    java编程常见面试题目

    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?  第三,Static Nested Class 和 Inner Class的不同,  第四,&和&&的...

    JAVA程序员32问

    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&...

    java 语言中常见易错知识点

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    Java面试32问

    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很...

    java面试题大全-基础方面

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

Global site tag (gtag.js) - Google Analytics