new*_*b24 0 java class protected object instance-variables
我对继承如何运作非常模糊,只是想确保我正在朝着正确的方向前进.
根据我的理解,我理解这一点
我知道子类可以看到父类的受保护变量.
我的问题:它是否相反?
它是否相反?
不,如果他们不在同一个包装中,请不要.根据Java访问控制教程中的表,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 |
+??????????????????????????????????????????????+
从JLS:
6.6.2.受保护访问的详细信息
甲
protected对象的成员或构造可以从它仅由代码中声明的封装,它负责该对象的执行外部访问.
超类不负责子类对象的实现.
你可以自己测试一下:
b/Base.java:
package b;
import a.Example;
public class Base {
public static void showAnswer(Example e) {
System.out.println(e.answer); //
}
}
Run Code Online (Sandbox Code Playgroud)
a/Example.java:
package a;
import b.Base;
public class Example extends Base
{
protected int answer = 42;
public static void main(String[] args)
{
Example e = new Example();
Base.showAnswer(e);
}
}
Run Code Online (Sandbox Code Playgroud)
尝试编译失败的原因是:
./b/Base.java:7: error: answer has protected access in Example
System.out.println(e.answer); //
^
1 error
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |