2015-05-29 56 views
-3

现在我简要阅读Java,并在简短的介绍中遇到了一个关于Java的问题。这个例子来自这本书。请参阅: 例如:为什么这段代码是错误的,在果壳中说Java是如此?

package de; 
public class A 
{ 
    protected String x; 
} 

package uk; 
import de.*; 

class B extends A 
{ 
//First One 
    public String getX(A a) 
    { 
     return "getX works" + a.x;//ERROR: x has protected access in A 
    } 
//Second One 
    public String getX(B b) 
    { 
     return "getX works" + b.x; // WORKS! 
    } 

} 

的作者表示,由于B的情况下,没有获得A. 如果我们改变像第二个代码arbitary实例,那么编译器是幸福的,因为相同确切类型的实例始终可以看到彼此的受保护字段。 我无法理解作者的意思,那究竟是什么?

+4

'import package de;'不是有效的导入语句。这已经使它错了...... – Jesper

+4

'保护字符串x;'!='保护字符串x;'您是否混淆了'private'和'protected'? –

+0

如果有什么不清楚的地方,你应该指定什么不清楚。他只是说你不能访问包含该受保护变量的类之外的受保护变量。 –

回答

1

B延伸A. x在A中受到保护。 因此B可以访问B中的x。

然而,B可以不访问A中的x(不是B)。

考虑扩展A.

你能看到的推理(Objecte至上的原则),落后于B的不能访问C'S X的C类。