Java访问修饰符求指点

weixin_41917520 2018-03-28 08:53:37
我记得protected是同包和不同包的子类都可以访问。但是下面的code报错了,说让我改成public。

PackageA
public class test2 {

private int a;
int b;
protected int c;
public int d;

}

import packageA.test2;
public class test1 extends packageA.test2 {
static public void main (String[] args)
{
test2 t2=new test2();
System.out.print(t2.a);
System.out.print(t2.b);
System.out.print(t2.c);
System.out.print(t2.d);
}

t2.a,t2.b不能访问很正常,为什么t2.c也不可以?
...全文
587 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjingying6339 2018-03-29
  • 打赏
  • 举报
回复
protected修饰符在同一个包内才能被访问
YKW_ 2018-03-28
  • 打赏
  • 举报
回复
protected修饰符是很容易理解错误的 而且日常开发也不容易遇到这个问题
YKW_ 2018-03-28
  • 打赏
  • 举报
回复
package B; import A.test2; public class test1 extends test2 { public static void main(String[] args) { test2 t2 = new test2(); System.out.print(t2.a); System.out.print(t2.b); System.out.print(t2.c); //这里是不行的 不可以在不同包的子类里用这个子类以外的对象去访问父类的protect 即使是父类本身 System.out.print(t2.d); test1 t1 = new test1(); System.out.println(t1.c);//这里是可以的 不同包的子类是指在其他包的子类可以访问到父类的protect变量 } } class test3 extends test2 { public static void main(String[] args) { test2 t2 = new test2(); System.out.println(t2.c); //这种情况又不可以了 因为不可以通过在子类里面用另一个子类的实例去访问父类的protect变量 } } 总结:protect修饰的变量在不同包的子类里可以访问 这句话应该理解为可以在子类里面用子类自己的实例去访问protect修饰的变量 而不能创建别的对象去访问 即使那个对象是父类或者继承自通过一个父类的子类

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧