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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-18 18:20  /  1762 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-18 23:08 编辑

下面这个程序编译不能通过,但分析结果说并不是Deriver中的className变量比Base中的className变量更具限制性的访问权限,问题出在PrivateMatter中,究竟是什么原因啊??
  1. package itcast;

  2. public class PrivateMatter {

  3.         public static void main(String[] args) {
  4.                
  5.                 System.out.println(new DeriVed().className);

  6.         }

  7. }

  8. class Base{
  9.         public String className = "Base";
  10.         
  11. }

  12. class DeriVed extends Base{
  13.         
  14.         private String className = "Derived";
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 知之为之,不知为不知,是知也~

查看全部评分

10 个回复

正序浏览
卜弦 中级黑马 2013-10-18 21:06:03
10#
ㄗ灬Night|K 发表于 2013-10-18 20:39
这是题目给出的分析,我看着晕晕的。。。。。。。。

像素好像有点低 看不清楚额
回复 使用道具 举报
卜弦 发表于 2013-10-18 19:44
这就是私有的问题啊。你在PrivateMatter中new了一个新对象要访问一个被私有了的变量,这样做是不允许的。 ...

这是题目给出的分析,我看着晕晕的。。。。。。。。

1111111.jpg (64.07 KB, 下载次数: 39)

1111111.jpg

2222222222.jpg (58.69 KB, 下载次数: 49)

2222222222.jpg
回复 使用道具 举报
卜弦 中级黑马 2013-10-18 19:44:19
8#
ㄗ灬Night|K 发表于 2013-10-18 19:26
问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。 ...

这就是私有的问题啊。你在PrivateMatter中new了一个新对象要访问一个被私有了的变量,这样做是不允许的。所以说系统提示问题出在PrivateMatter中的。
回复 使用道具 举报
ㄗ灬Night|K 发表于 2013-10-18 19:26
问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。 ...

是私有的过   错误提示也是准确的
回复 使用道具 举报
卜弦 发表于 2013-10-18 19:18
哥们 被私有了的变量是不能直接被外界访问的,你需要对外提供一个访问的方法 ...

问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。
回复 使用道具 举报
本帖最后由 上篮高手 于 2013-10-18 19:26 编辑

C:\Users\mic\Desktop\新建文件夹\bbbbbbbbb12.pngclass DeriVed extends Base{
        private String className = "Derived";
}

子类隐藏了父类的成员变量
当你定义的className  为私有,当然也就不能直接引用了。


回复 使用道具 举报

  1. package itcast;

  2. public class PrivateMatter {

  3.         public static void main(String[] args) {
  4.                
  5.                 System.out.println(new DeriVed().getName());//className改为getName();
  6.         }
  7. }

  8. class Base{
  9.         public String className = "Base";
  10.         
  11. }

  12. class DeriVed extends Base{
  13.         
  14.         private String className = "Derived";

  15.                 String getName( )//提供访问私有变量的方法。
  16.                 {
  17.                         return className;
  18.                 }         
  19. }
复制代码
哥们 被私有了的变量是不能直接被外界访问的,你需要对外提供一个访问的方法

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 知之为之,不知为不知,是知也~

查看全部评分

回复 使用道具 举报
我修改了一下你的DeriVed 类
public class PrivateMatter{
     public static void main(String[] args){
    DeriVed d= new DeriVed("Derived");
    d.see();     
    }
   
}
   class Base{
        public String className = "Base";   
}

class DeriVed extends Base{   
     
     private    String className;
        
         public   DeriVed(String className)
          {
         
          this.className=className;

  }
        void see(){
System.out.println (className);
}
}
这样程序能运行了。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
对于DeriVed中的成员变量className,你用的是private权限
你创建的DeriVed对象,就不能直接访问该成员变量
默认权限或者public权限就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马