日期:2014-05-20  浏览次数:20792 次

我发现了一个JAVA中很怪异的事情求大虾解释
对一个类来说大家都知道 protected修饰的属性和方法,所有继承这个类的子类都可以访问。
但有种情况下不同包下的子类就访问不了?不知道为什么?请大侠们一起探讨下为什么?
例如 
package com.a;
public class A{
protected void fun(){
System.out.println("fun()...");
}
}


package com.b;
public class B extends A{
protected void test(){
A a=new A();
a.fun();//这里就编译不了?}
}

为什么我new 出来的对象 就不能访问这个对象的 protected方法啊?

------解决方案--------------------
刚才没看清,这里B访问的是A的一个对象的protected方法。。。不同包,不可见。子类可见的意思是可以直接fun();
------解决方案--------------------

俺错了。

你这里用a.fun();相当于在包外调用a的protected方法。
你的原意是想调B继承的方法吧。
------解决方案--------------------
protected 修饰的方法,子类可以访问的,原因在于是子类继承过来的。

但是LZ使用的方法是:
Java code

// 这时候,涉及的的确是作用域的问题,而不是继承的问题。
A a = new A(); 
a.fun();

------解决方案--------------------
protected是指子类对象可以访问,并不是说子类中可以访问