2017-03-08 103 views
0

我探討一些示例代碼,我發現下面的代碼:Java靜態訪問超級

一個login服務接口:

public interface LoginService extends Serializable { 

     default boolean isLoggedIn (final HttpServletRequest req) { 

      return null != PortalUtil.getUserId(req); 
     } 
} 

一個LoginServiceFactory其中包含實現login服務

嵌套LoginServiceImpl類
public class LoginServiceFactory implements Serializable { 

    private volatile LoginService loginService = null; 

    private final class LoginServiceImpl implements LoginService { 

      @Override 
      public boolean isLoggedIn(final HttpServletRequest req) { 

       /** this is the part I don't understand */ 
       return LoginService.super.isLoggedIn(req); 
      } 
    } 
} 

我不明白在LoginService.super.isLoggedIn(req)中調用哪種方法。根據我的理解,它叫isLoggedIn(req)接口LoginService的超級接口。但我認爲這是不對的,因爲超級界面是Serializable。有人能幫助我嗎?

編輯 我已經編輯完整的示例我的問題。我不認爲它是真的重複,因爲這個例子比我在這個網站上找到的更復雜一點。

+0

它不是一個靜態引用,正如它的更多的是「完全合格」的參考。 – Rogue

+0

這不是靜態訪問,它只是一個限定符,明確說明你想要訪問什麼類。當試圖從內部類中引用外部類時非常有用。 – 4castle

+0

如果您查看發生此通話的上下文,它會幫助您(和我們)找到解釋。 –

回答

0

當你在內心課上做

super.foo();將調用超類內部類

主叫

Outer.super.foo()中的,把foo()的方法;將調用名爲Outer的外部類的超類的foo()方法。

class Outer extends OuterSuper { 
    class Inner { 
     public void someMethod() { 
      Outer.super.foo(); 
     } 
    } 
}