A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dev_Lzf 中级黑马   /  2013-4-8 13:18  /  1405 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Dev_Lzf 于 2013-4-8 23:05 编辑



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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 续圆凯 于 2013-4-8 13:51 编辑

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

我的Child类并没有main方法,只是编译的时候出错,提示“x是受保护的”,好像包外子类能够使用超类实例的引用访问该成员,我想知道为什么super.x的时候编译没有错?
回复 使用道具 举报
本帖最后由 陈中岩 于 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是保护权限
回复 使用道具 举报
陈中岩 发表于 2013-4-8 16:09
包与包之间的访问
不同包之间的类该如何访问呢?
总结:

:handshake,有道理!
回复 使用道具 举报
Dev_Lzf 发表于 2013-4-8 23:04
,有道理!

互相学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马