Java 不同包中受保护变量的角色和访问级别

Java 不同包中受保护变量的角色和访问级别,java,oop,Java,Oop,根据我的理解规则和受保护变量的访问级别: 如果是同一个包裹 class A { protected int =200; } class B extends A { class D extends A { System.out.print(a.i); B是B的ref变量 B.i覆盖B类中i的值 b.i = 400; a是a的ref变量 a、 我将永远打印200 } class C extends B { }

根据我的理解规则和受保护变量的访问级别:
如果是同一个包裹

class A {    

protected int =200;    

}    

class B extends A {    
class D extends A {     

System.out.print(a.i);    
B是B的ref变量
B.i覆盖B类中i的值

b.i = 400;    
a是a的ref变量
a、 我将永远打印200

} 



class C extends B {    
}    
c是c的ref变量 c、 i重写c类中i的值

c.i = 500;  
a是a的ref变量 a、 我将永远打印200

} 



class C extends B {    
}    
结论:A类受保护成员在所有类别的同一包中公开

如果不同的软件包使用一个
这里A和D不在同一个包中

class A {    

protected int =200;    

}    

class B extends A {    
class D extends A {     

System.out.print(a.i);    
上述语句将抛出编译时错误
此处a.i不可访问,我现在在a中是私人的
您只能将i与ref变量D一起使用

System.out.print(d.i);    
//no error

}

class E extends D {    
System.out.print(a.i);    
上述语句将抛出编译时错误
这里a.i是不可访问的,我现在在a.i是私人的

System.out.print(d.i);    
上述语句将抛出编译时错误
这里无法访问d.i,我现在是d.i的私人 您只能将i与ref变量E一起使用

System.out.print(e.i);  
无误

} 
结论:类A的受保护成员在其直接子类的其他包中充当私有变量

有人能给我更多关于受保护变量访问级别的详细信息吗

你试过了吗,这对受保护的修饰符的用法给出了相当好的解释

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


或者,如果您有问题,但仍然有一些问题,请详细说明。

阅读此链接,您将找到您的答案


创建一些getter和setter来在其他子类中使用变量,或者使用this.i来访问变量i。

只要。。。一些随机的细节?除了与实际问题无关之外,您的问题太广泛了。Marko-我的问题非常简单:)我只是想知道受保护变量包的访问级别。如果您的问题很简单,请明确说明
有人能给我更多关于受保护变量访问级别的详细信息吗?
不是一个明确而简单的问题,这是一个对非重点贡献的一般要求。Solar-感谢官方java教程链接。我的问题是为什么受保护的成员在另一个包的子类中是私有的。我们只能通过子类的ref变量而不是实际类的ref变量来访问子类中的受保护变量。好吧,您可以通过从子类直接访问父类的受保护变量(即使这些类不共享同一个包),这是继承的一个方面。当您像这样访问变量时:
System.out.print(a.i)你做错了。如果出于某种原因需要通过父级引用使用变量,则应将变量设置为静态:
System.out.print(A.i)
或者只是像这样使用这个关键字。我回答你的问题了吗?