zoukankan      html  css  js  c++  java
  • 《thinking in java》 接口与内部类

    书本上的例子

    改编后的。

     1 package test2;
     2 
     3 class A{
     4     interface B{void f();}
     5     public class BImp implements B{public void f(){}}
     6     private class BImp2 implements B{public void f(){}}
     7     
     8     public interface C{void f();}
     9     class CImp implements C{public void f(){}}
    10     private class CImp2 implements C{public void f(){}}
    11     
    12     private interface D{void f();}
    13     private class DImp implements D{public void f(){}}
    14     public class DImp2 implements D{public void f(){}}
    15     
    16     public D getD(){return new DImp2();}
    17     private D dRef;
    18     public void receiveD(D d){dRef=d;dRef.f();}    
    19     
    20 }
    21 interface E{
    22     interface G{void f();}
    23     
    24     public interface H{void f();}
    25     void g();
    26 }
    27 public class NestingInterfaces {
    28 
    29     public class BImp implements A.B{public void f(){}}
    30     class CImp implements A.C{public void f(){}}
    31     
    32 //    The type A.D is not visible
    33 //    class DImp implements A.D{public void f(){}}
    34     
    35     class EImp implements E{public void g(){}}
    36     class EGimp implements E.G{public void f(){}}
    37     
    38     class EImp2 implements E{
    39         public void g(){}
    40         class EG implements E.G{public void f(){}}
    41     }
    42     
    43     public static void main(String[] args) {
    44         A a=new A();
    45         
    46         //编译器在A.D处报错:The type A.D is not visible
    47 //        A.D ad=a.getD();
    48         
    49         //编译器在 a.getD() 处报错:Type mismatch: cannot convert from A.D to A.DImp2
    50 //        A.DImp2 di2=a.getD();  
    51         
    52         A.DImp2 di2=(A.DImp2)a.getD();
    53         System.out.println(di2.getClass().getName());//test2.A$DImp2
    54          
    55         //The type A.D is not visible
    56 //        a.getD().f();
    57         
    58         ((A.DImp2)a.getD()).f();
    59         
    60         A a2=new A();
    61         a2.receiveD(a.getD());
    62     }
    63     
    64 }

    可以顺利运行。

    PS:编译器识别代码总是从左到右,从上到下,一步步进行的。至于代码的运行逻辑,那是识别之后的事情。

  • 相关阅读:
    Jasper 常用知识点总结
    Linux
    搭建spring项目,无法创建RequestMappingHandlerMapping异常
    pom.xml文件设置
    MySQL的常用JSON函数
    SQL中的条件判断语句(case when zhen if,ifnull)用法
    sql查询原理
    sql积累
    Linux常用命令大全
    mysql中group by 的用法解析
  • 原文地址:https://www.cnblogs.com/01picker/p/4316578.html
Copyright © 2011-2022 走看看