黑马程序员技术交流社区

标题: 程序错误分析疑问 [打印本页]

作者: ㄗ灬Night|K    时间: 2013-10-18 18:20
标题: 程序错误分析疑问
本帖最后由 ㄗ灬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. }
复制代码

作者: 風諾    时间: 2013-10-18 18:40
对于DeriVed中的成员变量className,你用的是private权限
你创建的DeriVed对象,就不能直接访问该成员变量
默认权限或者public权限就可以了
作者: ╰┄轩、辕_ヤ    时间: 2013-10-18 19:14
我修改了一下你的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);
}
}
这样程序能运行了。

作者: 卜弦    时间: 2013-10-18 19:18

  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. }
复制代码
哥们 被私有了的变量是不能直接被外界访问的,你需要对外提供一个访问的方法
作者: 上篮高手    时间: 2013-10-18 19:24
本帖最后由 上篮高手 于 2013-10-18 19:26 编辑

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

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



作者: ㄗ灬Night|K    时间: 2013-10-18 19:26
卜弦 发表于 2013-10-18 19:18
哥们 被私有了的变量是不能直接被外界访问的,你需要对外提供一个访问的方法 ...

问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。
作者: 上篮高手    时间: 2013-10-18 19:28
ㄗ灬Night|K 发表于 2013-10-18 19:26
问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。 ...

是私有的过   错误提示也是准确的
作者: 卜弦    时间: 2013-10-18 19:44
ㄗ灬Night|K 发表于 2013-10-18 19:26
问题的分析中有提到,并不是私有的问题,错误出现在PrivateMatter中,只是我不明白为什么。 ...

这就是私有的问题啊。你在PrivateMatter中new了一个新对象要访问一个被私有了的变量,这样做是不允许的。所以说系统提示问题出在PrivateMatter中的。
作者: ㄗ灬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, 下载次数: 48)

2222222222.jpg

作者: 卜弦    时间: 2013-10-18 21:06
ㄗ灬Night|K 发表于 2013-10-18 20:39
这是题目给出的分析,我看着晕晕的。。。。。。。。

像素好像有点低 看不清楚额




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