黑马程序员技术交流社区

标题: 关于protected问题 [打印本页]

作者: Dev_Lzf    时间: 2013-4-8 13:18
标题: 关于protected问题
本帖最后由 Dev_Lzf 于 2013-4-8 23:05 编辑



如上图:
当子类和父类不在同一个包下时,在子类里面的P.x编译出错,而super.x没有出错??


作者: 续圆凯    时间: 2013-4-8 13:48
本帖最后由 续圆凯 于 2013-4-8 13:51 编辑

因为你的main方法是静态的 静态中是不能访问非静态的所有属性和方法 所以你只能在非静态中去使用对象a的protected属性 访问的时候一定要用super.protected因为这样才是在同一个包中 如果你用a.protected是不能访问的 因为new 的话 就不是在同一个包中
Child继承于Parent所以super.protected 是同一个包中的
new 的包就是不在同一个包中
作者: 梁航斌    时间: 2013-4-8 13:50
编译异常发来看看
作者: Dev_Lzf    时间: 2013-4-8 15:07
续圆凯 发表于 2013-4-8 13:48
因为你的main方法是静态的 静态中是不能访问非静态的所有属性和方法 所以你只能在非静态中去使用对象a的pro ...

我的Child类并没有main方法,只是编译的时候出错,提示“x是受保护的”,好像包外子类能够使用超类实例的引用访问该成员,我想知道为什么super.x的时候编译没有错?
作者: 陈中岩    时间: 2013-4-8 16:09
本帖最后由 陈中岩 于 2013-4-8 16:11 编辑
  1. package certification;

  2. public class Parent {
  3.           protected int x = 9;
  4.           //public int x = 9;
  5. }
  6. //--------------------------------------------------
  7. package Other;

  8. import certification.Parent;

  9. public class Child extends Parent{
  10.         public void testIt()
  11.         {
  12.                 Parent p = new Parent();
  13.                 System.out.println(super.x);//protected是可以访问父类中的方法
  14.                 System.out.println(p.x);//这里不是相当于子类访问父类方法,而是相当于其中一个类调用另一个类中的函数
  15.                                                                 //所以这里像调用的话,是要在Parent类中加上public共有的修饰的
  16.         }
  17. }
  18. //如有不明白请看说明
复制代码
包与包之间的访问
不同包之间的类该如何访问呢?
总结:
包与包之间进行访问,被访问的包中的类以及类中的成员需要public修饰。
不同包中的子类还可以直接访问父类中被protected权限修饰的成员.

包与包之间可以使用的权限只有两种,public protected.

总结一下权限问题:
①public②protected③(啥都不写)④private
同一个类中①②③④
同一个包中①②③
子      类①②
不同  包中①

protected是保护权限
作者: Dev_Lzf    时间: 2013-4-8 23:04
陈中岩 发表于 2013-4-8 16:09
包与包之间的访问
不同包之间的类该如何访问呢?
总结:

:handshake,有道理!
作者: 陈中岩    时间: 2013-4-9 04:33
Dev_Lzf 发表于 2013-4-8 23:04
,有道理!

互相学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2