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

Dhr*_*hah 3 java inheritance class

我有一个问题属于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?
   }  
}
Run Code Online (Sandbox Code Playgroud)

它有什么意义吗?或者是默认情况下我们必须采取的行为?

Per*_*ror 5

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
}
Run Code Online (Sandbox Code Playgroud)


Ted*_*opp 5

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

  • public - 所有代码都可见
  • protected - 对于同一个包中的所有代码和子类都可见,而不管包
  • 没有(默认) - 对同一个包中的所有代码都可见
  • private - 仅对同一类中的代码可见(包括嵌套类)

例如,参见Java教程控制对类成员的访问或(有很多技术细节)Java语言规范的第6.6节.


Ami*_*ani 5

关键字的定义

受保护

protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员.

我建议你读这个.