【问题标题】:Roles and access level of protected variables in different packages不同包中受保护变量的角色和访问级别
【发布时间】:2015-10-16 15:09:00
【问题描述】:

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

class A {    

protected int =200;    

}    

class B extends A {    

B 是 B 的引用变量
B.i 覆盖 B 类中 i 的值

b.i = 400;    

a 是 A 的引用变量
a.i 将始终打印 200

} 



class C extends B {    

c 是 C 的引用变量 c.i 覆盖 C 类中 i 的值

c.i = 500;  

a 是 A 的引用变量 a.i 将始终打印 200

}    

结论:A 类的受保护成员在所有类的同一个包中都是公共的。

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

class D extends A {     

System.out.print(a.i);    

上面的语句会抛出编译时错误
这里 a.i 不可访问,我现在在 A 中是私有的
您只能将 i 与 D 的 ref 变量一起使用

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

}

class E extends D {    
System.out.print(a.i);    

上面的语句会抛出编译时错误
这里 a.i 不可访问,i 现在在 A 中是私有的

System.out.print(d.i);    

上面的语句会抛出编译时错误
这里 d.i 不可访问,我现在在 D 中是私有的 您只能将 i 与 E 的 ref 变量一起使用

System.out.print(e.i);  

没有错误

} 

结论:类 A 的受保护成员在其直接子类的其他包中表现为私有变量。

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

【问题讨论】:

  • 只是……一些随机的细节?除了不是关于实际问题之外,您的问题太宽泛了。
  • Marko - 我的问题很简单 :) 我只是想知道受保护变量包的访问级别。
  • 如果您的问题很简单,请明确说明。 Can anyone give me more details on access level of protected variables ?不是一个清晰而简单的问题,它是对没有重点的贡献的一般要求。

标签: java oop


【解决方案1】:

您是否尝试过 official Java tutorial,它对 protected 修饰符的用法给出了相当不错的解释?

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

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

【讨论】:

  • 太阳能 - 感谢官方 java 教程链接。我的问题是为什么受保护的成员在另一个包的子类中是私有的。我们只能通过子类的引用变量而不是实际类的引用变量来访问子类中的受保护变量。
  • 好吧,你可以通过直接从子类访问它来使用父类的受保护变量(即使这些类不共享同一个包),这是继承之一方面。当你像这样访问你的变量时:System.out.print(a.i); 你做错了。如果您出于某种原因需要通过父母的参考使用它,您应该将变量设为静态:System.out.print(A.i); 或只使用 this 关键字,如 this.i 我回答了您的问题吗?
【解决方案2】:

阅读此链接您会找到答案。

https://stackoverflow.com/a/19949375/5152910

要么创建一些 getter 和 setter 来使用其他子类中的变量,要么你 this.i 来访问变量 i。

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 2023-04-09
    • 2014-05-14
    • 2014-12-06
    • 2013-12-22
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多