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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乖睡觉咯 中级黑马   /  2013-8-16 22:59  /  1563 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Fu{
  2.         int num = 4;
  3.         Fu(){
  4.                 num = 5;
  5.         }
  6. }
  7. class Zi extends Fu{
  8.         int num = 6;
  9.         public void method(){
  10.                 int num = 7;
  11.                 System.out.println(num);
  12.         }
  13. }

  14. class demo{
  15.         public static void main(String[] args) {
  16.                 Zi z = new Zi();
  17.                 z.method();
  18.         }
  19. }
复制代码
运行结果一开始是 7;
想输出6的话 System.out.println(num);  改为 System.out.println(this.num);
想输出5的话 System.out.println(num);  改为 System.out.println(super.num);
那要是想输出 4 的话怎么改啊 ??   求解

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

3 个回复

倒序浏览
构造函数是给数据初始化的,你定义了一个num等于4,然后然后在程序加载的时候构造函数就改变了num的值为5了,也就是该类的对象中存在的初始化num就是5,所以你要想打印出4,在你现在这个程序是不行的,要打印出4,你可以不在构造函数中初始化num为5.
回复 使用道具 举报
class Fu{
        int num = 4;
        Fu()
       {
             num = 5;
        }
       Fu(int num)
       {
            this.num = num;
        }
}
class Zi extends Fu{
        int num = 6;
        Zi()
       {
               super(int num);
       }
        public void method(){
                int num = 7;//与成员变量同名的局部变量
                //System.out.println(num); //调用的是method方法内的局部遍历
               //System.out.println(this.num);//调用的事Zi类中的成员变量。
               System.out.println(super.num);//调用的事Fu类中的成员变量。
        }
}
class Demo1{
        public static void main(String[] args) {
                Zi z = new Zi();  
                z.method();
        }
}


按照上面的修改运行结果就是4,在父类中添加一个有参数的构造方法,并在子类构造方法中显式调用.但这样改的话可能跟楼主的初衷不符。

其实楼主所写的代码中,父类中的num值在创建子类对象时,因为调用了父类构造方法进行了初始化赋值,num变量里面的值已经不再是4了,所以如果仅仅是调用num,而不对num重新赋值,是无法再输出4的结果的。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
创建子类对象时,会先调用父类的构造函数把父类对象里的成员变量num的值由4变为5。我是这样想的,如果要输出4,只能不调用父类的构造函数,只有用static关键字,把成员变量变为静态的,直接由类访问。经过尝试发现下面的代码可以实现输出4:
  1. class Fu
  2. {
  3.         static int num = 4;//这里定义静态成员变量
  4.         Fu()
  5.     {
  6.                 num = 5;
  7.         }
  8. }
  9. class Zi extends Fu
  10. {
  11.         int num = 6;
  12.         public static void method()//这里定义静态成员函数
  13.     {
  14.                 int num = 7;
  15.                 System.out.println("num="+Fu.num);//这里调用父类的静态成员变量
  16.         }
  17. }
  18. class demo  
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Zi.method();//直接用类调用静态方法
  23.         }
  24. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马