<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## [接口嵌套](https://lingcoder.gitee.io/onjava8/#/book/10-Interfaces?id=%e6%8e%a5%e5%8f%a3%e5%b5%8c%e5%a5%97) 接口可以嵌套在類或其他接口中。下面揭示一些有趣的特性: ~~~ // interfaces/nesting/NestingInterfaces.java // {java interfaces.nesting.NestingInterfaces} package interfaces.nesting; class A { interface B { void f(); } public class BImp implements B { @Override public void f() {} } public class BImp2 implements B { @Override public void f() {} } public interface C { void f(); } class CImp implements C { @Override public void f() {} } private class CImp2 implements C { @Override public void f() {} } private interface D { void f(); } private class DImp implements D { @Override public void f() {} } public class DImp2 implements D { @Override public void f() {} } public D getD() { return new DImp2(); } private D dRef; public void receiveD(D d) { dRef = d; dRef.f(); } } interface E { interface G { void f(); } // Redundant "public" public interface H { void f(); } void g(); // Cannot be private within an interface //- private interface I {} } public class NestingInterfaces { public class BImp implements A.B { @Override public void f() {} } class CImp implements A.C { @Override public void f() {} } // Cannot implements a private interface except // within that interface's defining class: //- class DImp implements A.D { //- public void f() {} //- } class EImp implements E { @Override public void g() {} } class EGImp implements E.G { @Override public void f() {} } class EImp2 implements E { @Override public void g() {} class EG implements E.G { @Override public void f() {} } } public static void main(String[] args) { A a = new A(); // Can't access to A.D: //- A.D ad = a.getD(); // Doesn't return anything but A.D: //- A.DImp2 di2 = a.getD(); // cannot access a member of the interface: //- a.getD().f(); // Only another A can do anything with getD(): A a2 = new A(); a2.receiveD(a.getD()); } } ~~~ 在類中嵌套接口的語法是相當顯而易見的。就像非嵌套接口一樣,它們具有**public**或包訪問權限的可見性。 作為一種新添加的方式,接口也可以是**private**的,例如**A.D**(同樣的語法同時適用于嵌套接口和嵌套類)。那么**private**嵌套接口有什么好處呢?你可能猜測它只是被用來實現一個**private**內部類,就像**DImp**。然而**A.DImp2**展示了它可以被實現為**public**類,但是**A.DImp2**只能被自己使用,你無法說它實現了**private**接口**D**,所以實現**private**接口是一種可以強制該接口中的方法定義不會添加任何類型信息(即不可以向上轉型)的方式。 `getD()`方法產生了一個與**private**接口有關的窘境。它是一個**public**方法卻返回了對**private**接口的引用。能對這個返回值做些什么呢?`main()`方法里進行了一些使用返回值的嘗試但都失敗了。返回值必須交給有權使用它的對象,本例中另一個**A**通過`receiveD()`方法接受了它。 接口**E**說明了接口之間也能嵌套。然而,作用于接口的規則——尤其是,接口中的元素必須是**public**的——在此都會被嚴格執行,所以嵌套在另一個接口中的接口自動就是**public**的,不能指明為**private**。 類**NestingInterfaces**展示了嵌套接口的不同實現方式。尤其是當實現某個接口時,并不需要實現嵌套在其內部的接口。同時,**private**接口不能在定義它的類之外被實現。 添加這些特性的最初原因看起來像是出于對嚴格的語法一致性的考慮,但是我通常認為,一旦你了解了某種特性,就總能找到其用武之地。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看