Java 超类/子类继承范围验证

Java 超类/子类继承范围验证,java,inheritance,subclass,Java,Inheritance,Subclass,注意:请在错误地将其标记为副本之前阅读全文 所以我不确定这是不是写的,我找不到一个简单的图表来回答: -如果在超类中有一个公共的、受保护的或包私有的方法或字段,并且子类在同一个包中,那么包外部或内部的类可以通过一个新的子类对象访问这些方法或字段,而如果该字段或方法是私有的,那么它就不能访问这些方法或字段,这是真的吗? -如果您在超类中有一个公共的或受保护的方法或字段,并且子类位于不同的包中,那么包外部或内部的类可以通过新的子类对象访问这些方法或字段,并且如果该字段或方法是包私有的或私有的,则不能

注意:请在错误地将其标记为副本之前阅读全文

所以我不确定这是不是写的,我找不到一个简单的图表来回答: -如果在超类中有一个公共的、受保护的或包私有的方法或字段,并且子类在同一个包中,那么包外部或内部的类可以通过一个新的子类对象访问这些方法或字段,而如果该字段或方法是私有的,那么它就不能访问这些方法或字段,这是真的吗? -如果您在超类中有一个公共的或受保护的方法或字段,并且子类位于不同的包中,那么包外部或内部的类可以通过新的子类对象访问这些方法或字段,并且如果该字段或方法是包私有的或私有的,则不能访问这些方法或字段,这是真的吗

换句话说,所有的访问组合(32个组合):public、protected、package private和private for方法、字段,对于相同或不同包中的子类,由在相同或不同包中的类中创建子类对象的类访问。 请注意,这个问题与“重复”问题之间的主要区别在于,我想知道如何使用包内/包外的非子类进行访问。不仅仅是子类中的内容。重复项不够具体,因为有一些小规则没有4x2表那么简单。例如,对于protected,包外部的子类不能在超类对象上运行超类方法,只能在子类对象上运行超类方法。“副本”中没有回答像这样的小问题


在你们把它标记为复制品之前,你们能看完整个该死的东西吗。我解释了为什么不是这样,但懒汉们既不看整件事也不回答问题。

我在文档中找到了这个表格:

                  Access Levels

Modifier    Class Package Subclass World
public        Y      Y        Y      Y
protected     Y      Y        Y      N
no modifier   Y      Y        N      N
private       Y      N        N      N

根据我的经验:

public:任何类都可以访问
受保护的:只有同一包中的类或继承该类的类才能访问
private:只有类可以访问。子类无法访问其父类的私有字段/方法。


最后一部分进行了编辑,以澄清它是如何不重复的。重复中的4x5表涵盖了访问修饰符可能出现的每种情况。“例如,对于受保护的,包外的子类不能在超类对象上运行超类方法,而只能在子类对象上运行超类方法。”不同包中的子类可以调用父保护的方法。您是否混淆了“受保护”和“默认”?@Tom我没有混淆“受保护”和“默认”您在包A中的类Foo。您在包B中扩展了类栏Foo。您在类栏中创建了新的Foo。Foo f=新的Foo();您不能使用f对象从类Foo运行受保护的方法。@Tom您可以在Bar类内创建一个Bar对象b,然后从中运行Foo方法。让我们看看受保护的示例。包a中有一个类超类,包B中有一个扩展该超类的公共类子类。假设我们在超类中有一个名为hello()的受保护方法。图表显示访问级别包括子类。所以你可以在子类中创建,子类sc=新的子类;然后做sc.hello()。这将起作用,并遵循图表,但例如,即使super中的hello受到保护,也可以执行SuperClass s=new SuperClass()。但是你不能这么做。hello()这个图表模棱两可。即使是说可以通过sub.nivasLast访问,我检查过你不能
保护一个类。您只能将其设置为公共、私有或不保留任何修改器。我指的是方法。编辑@BenjaminUrquhartYes,因为超类不是子类的实例。除了observationYet()之外,我没有任何东西可以支持该语句。hello()位于超类中,并且受保护,允许扩展。看,这是含糊不清的,像这样的细节是我一直在寻找,但它是好的。