【发布时间】:2016-03-17 21:49:32
【问题描述】:
为什么可以在Java中创建一个可见性小于超类的子类。
package 1
public class Class1 {
public Class1 hello(){
Class1 c= new Class2();
return c;
}
}
class Class2 extends Class1 {
public Class1 hello() {
System.out.println("In overriden method");
return null;
}
}
假设 Class1 和 Class2 在同一个包中,Class2 的可见性是包私有的。
package 2
public class Major {
public static void main(String[] args) {
Class1 ob = new Class1();
ob.hello().hello();
}
}
您会注意到,由于运行时多态性,将打印“In overriden method”。
在运行时,当Class2 位于具有包私有可见性的不同包中时,如何从main() 访问Class2 的hello() 方法?
Class2 不应该是可访问的,因此Class2 中的hello() 方法也不应该是可访问的。
【问题讨论】:
-
没有什么可以阻止公共类从包 2 返回 Class2 的实例。
-
不要使用引号,而是使用
code-blocks(编辑器菜单中带有{}图标的按钮)来保留格式。 -
你为什么要强制这样的限制?没有意义
-
main方法不能直接访问Class2,因为Class2的存在以及它的作用是包1 的内部问题。但是,通过多态性,Class2的实例可以作为Class1引用传递给main,并且main可以调用任何公共Class1方法,即使该方法被Class2覆盖。都是关于encapsulation。 -
Class2isnt 可访问,但根据定义,它实现的任何由Class1的合同表达的东西都是可访问的。你的问题没有意义。
标签: java polymorphism package public overriding