1)如果存在3个类,一个是普通类A其中有个方法a(),接口B有个方法a(),这时,当类C既继承A又实现B的时候,会出现方法混乱现象。这样的情况在编译器中是不允许存在的。
2)内部类中无法定义static静态块。
3)匿名类对于接口的实现才有存在的实际价值,但是对于普通类,如果通过匿名类对其进行继承,顶多只是对现有类的复写,由于在向上转型的过程中会对实现类的接口按照父类的方法进行窄化处理,因此,即便匿名类对父类进行了功能的扩充,但事实上这些扩充的方法根本是没有机会使用到的。如果出现需要在匿名类对父类进行扩充的情况,可视情况将其定义成新独立类或者内部类。并且应该考虑类的命名以及方法的命名是否存在问题。
4)Inner class可以被protected、private、static甚至final进行修饰,但是,如果一个Inner class被修饰为一个final类型时,那么他就无法再进行派生子类
以下代码仅供参考:
java 代码
- package interfaceandinnerclass;
- public class FriendFatherImpl implements FriendFather, FriendFatherOther {
- public void test() {
- }
- protected static class A {
- void a() {
- System.out.println("A is called");
- }
- void x() {
- System.out.println("XX is called");
- }
- }
- private class B extends A {
- public B(){}
- void b() {
- System.out.println("A is called");
- }
- }
- private interface C {
- void c();
- }
- private interface D {
- void d();
- void x();
- }
- // public abstract class S extends B implements C,D{
- // }
- public static C mytest() {
- System.out.println("FriendFatherImpl is called");
- return new C() {
- public void c() {
- System.out.println("C is called");
- }
- };
- }
- public static B myTest(){
- FriendFatherImpl friendFatherImpl=new FriendFatherImpl();
- return friendFatherImpl.new B(){
- public void first(){System.out.println("first is called");}
- public void second(){System.out.println("second is called");}
- public void thrid(){System.out.println("thrid is called");}
- public void fourth(){System.out.println("fourth is called");}
- };
- }
- public static void main(String[] args) {
- C c = mytest();
- c.c();
- B b=myTest();
- b.a();
- b.b();
- b.x();
- }
- }
注:请注意其中绿色注释部分:
java 代码
- // public abstract class S extends B implements C,D{
- // }
这段代码事实上是无法编译通过的,之所以放在这里,主要是为了说明第一点问题。
备注:此文档在9月将一直处于维护状态。