`

Inner class与匿名类相关问题汇总

    博客分类:
  • J2SE
阅读更多

1)如果存在3个类,一个是普通类A其中有个方法a(),接口B有个方法a(),这时,当类C既继承A又实现B的时候,会出现方法混乱现象。这样的情况在编译器中是不允许存在的。


2)内部类中无法定义static静态块。


3)匿名类对于接口的实现才有存在的实际价值,但是对于普通类,如果通过匿名类对其进行继承,顶多只是对现有类的复写,由于在向上转型的过程中会对实现类的接口按照父类的方法进行窄化处理,因此,即便匿名类对父类进行了功能的扩充,但事实上这些扩充的方法根本是没有机会使用到的。如果出现需要在匿名类对父类进行扩充的情况,可视情况将其定义成新独立类或者内部类。并且应该考虑类的命名以及方法的命名是否存在问题。


4)Inner class可以被protected、private、static甚至final进行修饰,但是,如果一个Inner class被修饰为一个final类型时,那么他就无法再进行派生子类

以下代码仅供参考:

java 代码
  1. package interfaceandinnerclass;   
  2.   
  3. public class FriendFatherImpl implements FriendFather, FriendFatherOther {   
  4.   
  5.     public void test() {   
  6.     }   
  7.   
  8.     protected static class A {   
  9.         void a() {   
  10.             System.out.println("A is called");   
  11.         }   
  12.   
  13.         void x() {   
  14.             System.out.println("XX is called");   
  15.         }   
  16.     }   
  17.   
  18.     private class B extends A {   
  19.         public B(){}   
  20.         void b() {   
  21.             System.out.println("A is called");   
  22.         }   
  23.     }   
  24.   
  25.     private interface C {   
  26.         void c();   
  27.     }   
  28.   
  29.     private interface D {   
  30.         void d();   
  31.   
  32.         void x();   
  33.     }   
  34.   
  35.     //  public abstract class S extends B implements C,D{   
  36.     //  }   
  37.     public static C mytest() {   
  38.         System.out.println("FriendFatherImpl is called");   
  39.         return new C() {   
  40.             public void c() {   
  41.                 System.out.println("C is called");   
  42.             }   
  43.         };   
  44.     }   
  45.     public static B myTest(){   
  46.         FriendFatherImpl friendFatherImpl=new FriendFatherImpl();   
  47.         return friendFatherImpl.new B(){   
  48.             public void first(){System.out.println("first is called");}   
  49.             public void second(){System.out.println("second is called");}   
  50.             public void thrid(){System.out.println("thrid is called");}   
  51.             public void fourth(){System.out.println("fourth is called");}   
  52.         };   
  53.     }   
  54.     public static void main(String[] args) {   
  55.         C c = mytest();   
  56.         c.c();   
  57.         B b=myTest();   
  58.         b.a();   
  59.         b.b();   
  60.         b.x();   
  61.     }   
  62. }   

 

注:请注意其中绿色注释部分:

java 代码
  1. //  public abstract class S extends B implements C,D{   
  2. //  }  

这段代码事实上是无法编译通过的,之所以放在这里,主要是为了说明第一点问题。

 

备注:此文档在9月将一直处于维护状态。

分享到:
评论

相关推荐

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

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

    java_ms.rar_Math Class_java collection

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

    java经典面试题汇总

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

    java面试笔试题大汇总

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

    最新最全Java面试题汇总

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

    Java内部类的一些总结

    作为刚入门Java的小白,这两天看到内部类,这里做一个总结,若有错误,欢迎指正~  内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。  内部类分为: 成员内部类、局部内部类、静态嵌套类、...

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 30 【基础】Java 中的final关键字有哪些用法? 31 【基础】内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 31 ...

    Java面试宝典2010版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    MySQL命令大全

    一、启动与退出 1、进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql> 2、退出MySQL:quit或exit 二、库操作 1、创建数据库 命令:create ...

    MYSQL常用命令大全

    一、启动与退出 1、进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql> 2、退出MySQL:quit或exit 二、库操作 1、、创建数据库 命令:create database...

Global site tag (gtag.js) - Google Analytics