package packageOne;
public class Base
{
protected void display(){
System.out.println(“in Base”);
}
}
package packageTwo;
public class Derived extends packageOne.Base {
public void show(){
new Base().display(); //this is not working throws compilation error that display() from the type Base is not visible
new Derived().display(); //is working
display(); //is working
}
}
这两个软件包位于两个不同的文件中。但是为什么这种行为呢?
http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.6
class C
protected member;
// in a different package
class S extends C
obj.member; // only allowed if type of obj is S or subclass of S
动机可能如下。如果obj
是S
,则类S
具有足够的内部知识,则它有权操作其成员,并且可以安全地进行此操作。
如果obj
不是S
,它可能是另一个子类S2
中C
,其中S
有没有想法。写作S2
时可能甚至还没有出生S
。为了S
操纵S2
受保护的内部结构是非常危险的。如果允许,从S2
的角度来看,它不知道谁会篡改其受保护的内部以及如何进行篡改,这使S2
工作很难就其自身状态进行推理。
现在,如果obj
是D
,并且D extends S
,S
访问危险obj.member
吗?并不是的。如何S
使用member
是一个共享knowlege
S
及其所有子类,包括D
。S
因为超类具有定义行为的权利,而D
子类具有接受和遵循行为的义务。
为了更容易理解,应将规则真正简化为要求其obj
(静态)类型准确S
。毕竟,子类D
出现在中是非常不寻常且不合适的S
。即使发生这种情况,静态类型obj
为D
,我们的简化规则也可以通过向上转换轻松地处理它:((S)obj).member
我正在阅读这本Java SCJP的书,我偶然发现了以下内容: 但是我得到了这个错误: 那么,出什么问题了?
问题内容: 我想了解以下示例中的情况(通过包从子类外部访问受保护的成员)。 我知道对于包外部的类,子类只能通过继承才能看到受保护的成员。 有两个包:和。 : : : 可以理解,中的方法可以访问,因为受保护的成员只能通过继承来访问。 我的问题是,为什么是方法,通过在基准访问时,工作正常的方法 ,但 将无法正常工作 通过访问时的参考? 问题答案: 该类中的代码被允许通过type的引用访问受保护的成员。
问题内容: 我遇到了一个奇怪的问题,我无法弄清楚在尝试插入程序时弹出的问题。另一个问题是我无法创建一个简单的测试用例,因为每次尝试都可以。我一定缺少一些并发症。但我会尽力清楚地描述这种情况,以防任何人熟悉。 我有一个称为Seed的基类,它是主应用程序的一部分,并由系统类加载器加载。我有一个包含Road类的插件,该类是Seed的子类。它是在运行时从单独的jar文件加载的。Road类引用字段Seed.
我有几个Azure Functions,我想使用Azure AD对其应用身份验证。在用户模拟身份验证方面,我已经成功做到了这一点。但不幸的是,我无法从尝试访问Azure Functions的守护程序应用程序中获得同样的工作。 我的守护程序应用程序在Azure AD中注册,并公开应用程序范围。基本上,我有其他构建为应用程序服务的API,可以从守护程序应用程序成功地进行身份验证。我为Azure功能应用
问题内容: 我想对此进行一些讨论,但无法推断出我的情况的答案。仍然需要帮助。 这是我的代码: 在上面的示例中,下面的一些定义似乎令人困惑: 问题: 为什么我不能从子类实例(对象)访问受保护的成员()? 问题答案: 作为声明类的子类的其他包中的类只能访问其自己的继承成员。 …但不是其他对象的继承成员。
问题内容: 我为SCJP做准备,我也知道受保护成员的作用域在包中以及在其他包中(在某些情况下,例如只有继承才可能)。 例如:我有三个类作为Parentclass Childclass Friendclass 这背后的原因是什么,在Friendclass中,成员x将不接受为其分配值,而对于Childclass而言,它充当私有成员。 问题答案: 您甚至无法访问,因为具有默认可见性(不受保护)。参见ht