《java核心技术》第9版卷一168页有这句话:
Manager类中的方法只能访问Manager对象中的hireDay域,而不能访问其他Employee对象中的这个域。
(注:Manager是Employee的子类,hireDay域是Employee的protected域)然后,我试了一下,发现不是这样。
class P{
protected int a;
public P(){}
public P(int a){
this.a = a;
}
}class C extends P{
public int b;
public C(){}
public C(int a,int b){
super(a);
this.b = b;
}
public void fun(){
a++;
P p = new P(10);
System.out.println("C.a= " + a);
System.out.println("P.a= " + p.a);
}
}public class Demo {
public static void main(String[] args) {
C c = new C(100,200);
c.fun();
}
}是不是这本书出错了?
Manager类中的方法只能访问Manager对象中的hireDay域,而不能访问其他Employee对象中的这个域。
(注:Manager是Employee的子类,hireDay域是Employee的protected域)然后,我试了一下,发现不是这样。
class P{
protected int a;
public P(){}
public P(int a){
this.a = a;
}
}class C extends P{
public int b;
public C(){}
public C(int a,int b){
super(a);
this.b = b;
}
public void fun(){
a++;
P p = new P(10);
System.out.println("C.a= " + a);
System.out.println("P.a= " + p.a);
}
}public class Demo {
public static void main(String[] args) {
C c = new C(100,200);
c.fun();
}
}是不是这本书出错了?
解决方案 »
- 请教,HashMap如何更新数据?
- JAVA如何获取一个时间 且不去电脑的当前系统时间 可以变通。?
- js文件格式化问题
- java .exe 文件运行时的警告 (警告: Duplicate name in Manifest: Sealed)
- <UNICODE> 怎么把String变量的值以UNICODE格式输出到文件?
- 为甚麽java源码中有好多变量要去引用域?
- 求一个DJ java Dcompiler3.9的SN?
- 哈哈,需要短信网关IP地址及其源代码的快来顶一下。
- jdbc的问题,急!!!!!
- 请教各位,怎样把String型转化为日期形式,
- 如何用java把txt文件以句子为单位切割?
- java socket 程序打成jar后运行 无法监听端口
书中有个词你要注意下“对象”,这个对象只是是与你子类有继承关系的对象,而不是有引用关系的对象。
如果像你那么写 P p = new P(10);的p与当前C类的关系是从属,即常说的has-a,p与C类的对象并没有继承关系,自然也就没有访问权限了。
正确的写法是什么,你应该使用this或者super,即你打印那个代码改成 System.out.println(this.a);//或者super.a。
最后补充一点,如果你把P中的a属性声明为static的,那么你报错那里同样是可以通过P.a访问到的,因为他们的类也是有继承关系的,类变量自然有访问权限。