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

protected 修饰符!
文件一:

package com.strategy;

public class A {

protected void show() {
System.out.println("show");
}

}

文件二:
package com.test;

import com.strategy.*;

public class B extends A {

public static void main(String[] args) {
                A a = new A();// 方式 1
                a.show();
B a = new B(); //方式2
a.show();
}

}

请问:
我知道protected 说可以被子类可用,为什么不能再子类中 new 父类的实例,去访问 父类的protected 方法?
硬是在子类中 new 子类的实例,才能去访问父类中的protected 方法?


------解决方案--------------------
方式1和方式2都没问题吧?
------解决方案--------------------
你的都没问题,是你把对象名取成相同的了,你把方式二改成:B a1 = new B(); // 方法二
a1.show();就可以了。
------解决方案--------------------
楼主看看这个.
http://bbs.csdn.net/topics/390227951
------解决方案--------------------
楼主还是先把protected的访问权限搞清楚。protected修饰的只能被同一个包中的类或其子类访问。你这个子类和父类不在同一个包下。你在子类中new 父类的实例,不在同一个包下当然不能访问了。而你用子类访问不论在哪个包地下。子类当然都能访问。
------解决方案--------------------
引用:
引用:
楼主还是先把protected的访问权限搞清楚。protected修饰的只能被同一个包中的类或其子类访问。你这个子类和父类不在同一个包下。你在子类中new 父类的实例,不在同一个包下当然不能访问了。而你用子类访问不论在哪个包地下。子类当然都能访问。

我可以不可以这么理解,A跟B不在同一个包里,所以在B类里用A的对象不能调用其protected方法,所……

嗯,可以这么理解