Java静态访问超级
问题描述:
我探讨一些示例代码,我发现下面的代码: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
。有人能帮助我吗?
编辑 我已经编辑完整的示例我的问题。我不认为它是真的重复,因为这个例子比我在这个网站上找到的更复杂一点。
答
当你在内心课上做
super.foo();将调用超类内部类
主叫
Outer.super.foo()中的,把foo()的方法;将调用名为Outer的外部类的超类的foo()方法。
在
class Outer extends OuterSuper {
class Inner {
public void someMethod() {
Outer.super.foo();
}
}
}
它不是一个静态引用,正如它的更多的是“完全合格”的参考。 – Rogue
这不是静态访问,它只是一个限定符,明确说明你想要访问什么类。当试图从内部类中引用外部类时非常有用。 – 4castle
如果您查看发生此通话的上下文,它会帮助您(和我们)找到解释。 –