public class A{
protected void show(){}
}
public static void main(String[] args){
A a=new A();
a.show();
}
这个可以直接调用。下面一个为什么不行?
public class B extends ArrayList{
public static void main(String [] args){
A a =new A();
a.show();//这个是对的。
ArrayList arr=new ArrayList();
arr.removeRange(1,2);//为什么写了这个方法就会报错。我不是对它实例化了,调用它的方法为什么调用不了??求高手解答
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
知道了。原来不同包的问题。刚试了。在同一包中可以。在不同包中就不行了。不同包中只有子类实例化才可以调用。奇葩...
1.问为什么不能直接调用,请翻回Java面向对象一章重看访问修饰符的内容
2.问为什么报错的先看清楚报错的异常信息,以及在什么地方报错的,看API文档对应的方法会在什么情况下抛这个异常,明明写的很明白。
removeRange方法不是public的,在包外怎么能使用。
还有就是B类已经集成了ArrayList为什么不用B实例化,调用removeRange()方法呢?
removeRange方法是protect的,也就是只能子类或包内访问。
你的B类虽然是ArrayList的子类,但是你。。
<preclass="brush:java;toolbar:true;auto-links:false;">ArrayListarr=newArrayList();arr.removeRange(1,2);就不对了,你这里并不是B类的实例调用removeRange方法,不满足条件。 如果这么来是可以的。<preclass="brush:java;toolbar:true;auto-links:false;">Bb=newB();b.removeRange(1,2);protected只能在子类或包内访问,我在B中访问A中的protected的方法可以访问啊,为什么?