我在包A中有一个类Base
,它定义了包私有方法foo()
。在包B中,我有一个扩展Impl
的课程Base
。在包A中,如果我尝试在foo()
的实例上调用Impl
,则会出现编译错误。 (但是,我可以将Impl
转换为Base
然后调用它。)
我应该能够从包中调用foo()
似乎是合理的,即使我调用它的对象是在包外定义的。我有什么理由可以吗?
答案 0 :(得分:0)
你自己给出了答案。包A的A类中的方法foo()的状态“package private”不会因为你扩展这个类而结束。只要扩展类B派生自不同的包B,如果您尝试访问包A的A类中的方法foo(),编译器将抛出错误。
我不能有充分的理由吗?
因为这是Java的规则。
答案 1 :(得分:0)
是的,有充分的理由 - package-private
隐藏您的实现,并将实现链接到实现所属的包。
实施A::foo()
与A
包相关联,并且只能从包B:foo
访问,而实施B
只能从包java.lang
访问。
您可以转换的内容,我们是否可以从每个超类的包中访问任何包私有实现;但这确实增加了包私有的范围。更不用说因为你的所有类都继承自java.lang.Object,所以每个包私有方法都可以从List<WebElement> link_boxes=driver.findElements(By.xpath("leaf-data-object-list[@id='objectList']/iron-list[@id='dataObjectList']/div[@id='items']"));
包中访问,这没什么意义!