2017-03-08 104 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(); 
     } 
    } 
}