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:编译器识别代码总是从左到右,从上到下,一步步进行的。至于代码的运行逻辑,那是识别之后的事情。

  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/01picker/p/4316578.html
Copyright © 2011-2022 走看看