黑马程序员技术交流社区

标题: 关于继承的小问题 [打印本页]

作者: 安浦鑫    时间: 2012-4-24 12:02
标题: 关于继承的小问题
  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
很简单 但是自己就是想不通了
作者: 黑马-刘昌文    时间: 2012-4-24 12:08
son s=new son();
                s.show();//这里子类s调用的是父类的方法,当然输出的就是父类的变量i。
作者: Friends★    时间: 2012-4-24 12:13
主要是你子类中没有固定的方法,你在主函数中调来调去,都是调用的是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:25
本帖最后由 邱俊杰 于 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了
        }
}

作者: 程序猿    时间: 2012-4-24 12:28
子类需要覆写父类的方法才可以出现你想要的结果的。
作者: 孙天    时间: 2012-4-24 12:34
在子类的方法show()里其实省略了,应该是System.out.println(super.num1),因为你没有对show()方法进行覆盖,其实调用的是父类的方法,结果让然得出父类的num1
作者: 王敏NO.09    时间: 2012-4-24 12:37
子类并没有覆盖父类的方法,调用的仍然是父类的方法,所以,运行结果为5,5
作者: 真真姐    时间: 2012-4-24 12:41
大家没有理解这个童鞋的意思,
他意思是:在子类里面已经定义了同名的变量 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);  // 加上这么一句话你看看值是多少
           }
    }

作者: 安浦鑫    时间: 2012-4-24 13:10
理解了 多谢各位
作者: 彭威    时间: 2012-4-24 13:16
因为 第二次 建立子类对象son s=new son();
                                   s.show();
子类s调用的是父类的方法:
其实打印的是这样的:                                 
                                  System.out.println(super.num1),




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