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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安浦鑫 初级黑马   /  2012-4-24 12:02  /  2398 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 father fa=new father();
  6.                 fa.show();
  7.                 son s=new son();
  8.                 s.show();
  9.         }
  10. }


  11. class father
  12. {
  13.         int num1=5;
  14.         void show()
  15.         {
  16.                 System.out.println(num1);
  17.         }
  18. }

  19. class son extends father
  20. {
  21.         int num1=10;
  22.        
  23. }
复制代码
为何输出的是5,5 不是5,10
很简单 但是自己就是想不通了

9 个回复

倒序浏览
son s=new son();
                s.show();//这里子类s调用的是父类的方法,当然输出的就是父类的变量i。
回复 使用道具 举报
主要是你子类中没有固定的方法,你在主函数中调来调去,都是调用的是show()方法,而show()方法是父类中特有的,所以值怎么会改变呢,

如果想改变  代码如下:

class Demo1
{
        public static void main(String[] args)
        {
                father fa=new father();
                fa.show();
                son s=new son();
                s.show1();
        }
}


class father
{
        int num1=5;
        void show()
        {
                System.out.println(num1);
        }
}

class son extends father
{
        int num1=10;
        void show1(){
        
        System.out.println(this.num1);
}
}

运行结果:
5
10
回复 使用道具 举报
本帖最后由 邱俊杰 于 2012-4-24 12:29 编辑

为何输出的是5,5 不是5,10
father fa=new fa
  fa.show();     这里是调用父类的show  很明显是5、
   son s=new son();  
   s.show();          //这里调用的是父类的show 因为你子类没有show方法、所以子类会继承父类的show,

想到子类的变量10参考代码 :
class son extends father
{
        int num1=10;
        void show()
        {
                System.out.println(num1);   // 加一个show方法在子类就o了
        }
}
回复 使用道具 举报
子类需要覆写父类的方法才可以出现你想要的结果的。
回复 使用道具 举报
在子类的方法show()里其实省略了,应该是System.out.println(super.num1),因为你没有对show()方法进行覆盖,其实调用的是父类的方法,结果让然得出父类的num1
回复 使用道具 举报
子类并没有覆盖父类的方法,调用的仍然是父类的方法,所以,运行结果为5,5
回复 使用道具 举报
大家没有理解这个童鞋的意思,
他意思是:在子类里面已经定义了同名的变量 num1,这是子类的变量,子类对象的num1属性应该是10才对,
实际上你的理解很正确,你说的也很正确,但是你有两个地方理解偏差
1、你的所有类都没大写,这个不规范,
2、你在子类中定义了同名的变量,却没有去调用这个变量,打印的是父类的变量
public classExtend
    {
       public static void main(String[] args)
           {
              fatherfa = newfather();
              fa.show();
              son s = new son();
              s.show();
              System.out.println(s.num1);  // 加上这么一句话你看看值是多少
           }
    }
回复 使用道具 举报
理解了 多谢各位
回复 使用道具 举报
因为 第二次 建立子类对象son s=new son();
                                   s.show();
子类s调用的是父类的方法:
其实打印的是这样的:                                 
                                  System.out.println(super.num1),
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马