黑马程序员技术交流社区

标题: 执行报错,求解 [打印本页]

作者: Gump    时间: 2013-10-31 15:13
标题: 执行报错,求解
本帖最后由 Gump 于 2013-10-31 15:56 编辑

class Fu
{
        private int num = 4;
        public void setNum(int num)
        {
                this.num =num;
        }
        public int getNum()
        {
                return this.num;
        }
}

class Zi extends Fu
{
        //int num = 5;
        void show()
        {
                System.out.println(num);
        }
}

class  ExtendsDemo2
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
                //System.out.println(z.num+"...."+z.num);
        }
}
报错:num可以在Fu中访问private   System.out.println(num);

作者: ixiangfeng    时间: 2013-10-31 15:20
你把Fu类中的num变成私有了 Zi类即使继承Fu也访问不到,而你又把Zi类中的num那行代码注释掉了 相当于你这里访问不到num变量了 那个报错的意思是你的num是私有的 你要访问它只能在Fu类里面访问 所以你要么把Fu类中的num的private去掉 要么不要把Zi类中的那行代码注释掉
作者: Gump    时间: 2013-10-31 15:28
ixiangfeng 发表于 2013-10-31 15:20
你把Fu类中的num变成私有了 Zi类即使继承Fu也访问不到,而你又把Zi类中的num那行代码注释掉了 相当于你这里 ...

我如果想让打印结果为4.该怎么做呢?在Fu类 num是私有的情况下
作者: ixiangfeng    时间: 2013-10-31 15:37
Gump 发表于 2013-10-31 15:28
我如果想让打印结果为4.该怎么做呢?在Fu类 num是私有的情况下

父类的变量是private的 子类是看不到的 要想访问父类中的私有成员可以通过父类中提供的公共方法
作者: Gump    时间: 2013-10-31 15:45
ixiangfeng 发表于 2013-10-31 15:37
父类的变量是private的 子类是看不到的 要想访问父类中的私有成员可以通过父类中提供的公共方法 ...

可以帮我修改下父类么,我看和我修改后的一致否,谢谢了
作者: kellyzyb    时间: 2013-10-31 15:47
本帖最后由 kellyzyb 于 2013-10-31 15:48 编辑
  1. class Fu
  2. {
  3.         private int num = 4;
  4.         public void setNum(int num)
  5.         {
  6.                 this.num =num;
  7.         }
  8.         public int getNum()
  9.         {
  10.                 return this.num;
  11.         }
  12. }

  13. class Zi extends Fu
  14. {
  15.         //int num = 5;
  16.         void show()
  17.         {
  18.                  int num =getNum(); //增加的代码,通过getNum方法获取父类num的值。
  19.                 System.out.println(num);
  20.                
  21.         }
  22. }

  23. class  ExtendsDemo2
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Zi z = new Zi();
  28.                 z.show();
  29.                 //System.out.println(z.num+"...."+z.num);
  30.         }
  31. }
复制代码
在代码上帮你做了修改。程序主要问题:父类将num私有化,子类是无法继承的。而且子类没有定义过变量num 所是会报错的。不过你父类定交了getnum的方法,可以通过这个方法获取num值。
作者: Gump    时间: 2013-10-31 15:48
kellyzyb 发表于 2013-10-31 15:47
在代码上帮你做了修改。程序主要问题:父类将num私有化,子类是无法继承的。而且子类没有定义过变量num 所 ...

thank you ,初学,总是学了后面忘了前面的,谢谢了
作者: ixiangfeng    时间: 2013-10-31 15:57
Gump 发表于 2013-10-31 15:45
可以帮我修改下父类么,我看和我修改后的一致否,谢谢了

我不知道你的具体需求啊 你的父类的num是私有的 而子类又没有定义num 所以子类的show()方法中的num是JVM不识别的 要么不要num 要么在子类中定义一个num 仅仅只是打印出一个4是很简单的 关键是你是怎样想的 你想在什么前提下把它打印出来
作者: 黄炳期    时间: 2013-10-31 18:34
如果问题已经解决,请重新分类帖子为“提问结束”
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
作者: 冯国强    时间: 2013-10-31 19:17
子类中变量注释掉后,子类中继承了父类中的变量。
但父类中的变量私有化,即封装。封装是将类中的属性和实现细节隐藏,只提供对外访问方式。
所以如果子类中要访问父类中的num变量,即调用父类中提供的访问方式getNum()方法即可获得父类中的同名变量。





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