Java中嵌套的默认接口和嵌套受保护接口有什么区别?为什么甚至允许嵌套的受保护接口?
Test.java
public class Test {
// not implementable outside of current package
interface NestedDefaultInterface {
}
// not implementable outside of current package?
protected interface NestedProtectedIface {
}
}
// both interfaces can be implemented
class Best implements Test.NestedProtectedIface, Test.NestedDefaultInterface {
}
MyClass.java
class AClass implements Test.NestedProtectedIface { //Error
}
class AnotherClass implements Test.NestedDefaultInterface { //Error
}
class OneMoreClass extends Test implements Test.NestedProtectedIface { //Error
}
答案 0 :(得分:4)
显示视觉差异:
package com.one
public class Test {
// not implementable outside of current package
interface NestedDefaultInterface {
}
// implementable in child classes outside of package
protected interface NestedProtectedIface {
}
}
在包裹之外:
package com.two
class SubTest extends Test {
public void testProtected() {
NestedProtectedIface npi = new NestedProtectedIface () {
// implementation
};
}
public void testDefault() {
// Won't compile!
// NestedDefaultInterface ndi = new NestedDefaultInterface() {
// };
}
}
这里的混乱是关于可见性。
扩展课程时,您可以从protected
引用访问所有this
个父级属性。
对于default
访问修饰符,它不会在包之外工作。
最流行的嵌套界面的真实示例是Map.Entry<K,V>
java.util.Map
。
Map
的每个实现都提供了自己的Entry<K,V>
实现。 (Node<K,V>
中的HashMap
,Entry<K,V>
中的TreeMap
等等。