Java多级继承 - 级别1类中的受保护实例变量



我有一个问题,该问题在Java中的多级继承下。这三个类别都在同一软件包中

我有A类:

public class A {
   protected int x;
}
public class B extends A {
   public void doSomething {
      // x is visible.agreed, as it is a direct subclass of A
   }  
}

public class C extends B {
   public void doSomething {
      // x is still visible, how come? I mean it is at the 2nd level 
     //  I am confused why?
   }  
}

它是否具有重要意义?还是我们默认必须采取的行为?

protected修饰符标记的变量/方法可在同一Pacakage中的所有类可见,仅在不同软件包中的子类都可以看到。以下是示例案例。

package a;
class A{
protected int x;
}
class B extends A{
//x can be accessed from this class
} 
class C extends B {
//x can be accessed from this class
}
class D{
//x can be accesed this class but you will have to create A's instance 
}
package B 
class One {
//cannot access x from this class
}
class Two extends A {
//can access x from this class
}

Java中的访问级别修饰符是:

  • public-可见所有代码
  • protected-在同一软件包中可见的所有代码和子类都可以看到
  • nothing (默认) - 同一软件包中的所有代码可见
  • private-仅在同一类(包括嵌套类)的代码
  • 中可见

参见,例如,Java教程控制对班级成员的访问或(有关大量技术细节)Java语言规范的第6.6节。

关键字的定义

受保护

受保护的修饰符指定只能访问成员 在自己的包裹中(与包装私有关系一样),此外, 另一个软件包中其类的子类。

我建议您阅读此。

java protected关键字的工作原理降低到 all sublasses(以及软件包的成员)。如果Object中有protected成员,则任何对象都可以访问它。相比之下,private仅可见本地类(和内部类),并且public可从所有人访问。

可以查看此词汇表,该词汇表显示了如何继承protected成员和方法,以及有关继承的Java文档。

您不能限制子类中对成员的访问。此规则适用于方法(您不能覆盖public方法并将其制成private),但是您可以在此处看到类比。如果字段为protected,则每个子类中的protected,无论多么深。当然,您不能在Java中覆盖字段,而只是为了给您一个概述。

请参考以下信息:http://docs.oracle.com/javase/tutorial/java/java/javaoo/accesscontrol.html

受保护修饰符指定成员只能在中访问其自己的软件包(如软件包 - 私有化)和,另外,由子类别在另一个软件包中的类

因此,如果您的类CAB共享软件包,其可访问的

继承是传递的:如果B类从a类继承;C类从B类继承;那么C也是一个A类的子类/儿童班/后代。

最新更新