黑马程序员技术交流社区

标题: 子类继承父类super方法的使用 [打印本页]

作者: ccyznhy    时间: 2013-6-24 19:46
标题: 子类继承父类super方法的使用
class Father
{
        int num=1;
       
}
class Son
extends Father
{
        int num=2;
        void show()
        {
                System.out.println(super.num);
        }
}
class ExtendsDemo
{
        public static void main(String[] args)
        {
                Son s=new Son();
                s.show();
        }
}
问:怎样将上述程序改动,使得super.num打印出子类的“2”?
顺便问一句怎样讲已经解决的问题从“未解决”变成“已解决”?
新手提问,请各位前辈指点迷津。。。


作者: 张承富    时间: 2013-6-24 21:53
你调用的就是父类的,怎么打印子类,
想打印子类的,直接num或者this.num
你这个思路本身就不对
继承就是要从父类身上得到一些东西,你还非要用父类得到子类的东西
作者: 神之梦    时间: 2013-6-24 22:34
class Father
{
         int num=1;
         
}
class Son extends Father
{
      
         void show()
         {                 num=2;
                 System.out.println(super.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
这样算不算你要的答案
作者: ccyznhy    时间: 2013-6-24 23:49
神之梦 发表于 2013-6-24 22:34
class Father
{
         int num=1;

你这个相当于把父类的变量给重新赋值了,没有解决我的问题
毕老师课程(毕向东_Java基础视频教程第07天-04-面向对象(子父类中变量的特点).avi)时间12:00--12:15大家毕老师的话。
作者: ccyznhy    时间: 2013-6-24 23:51
发错了 时间是13:00--13:15
作者: 神之梦    时间: 2013-6-25 00:07
ccyznhy 发表于 2013-6-24 23:49
你这个相当于把父类的变量给重新赋值了,没有解决我的问题
毕老师课程(毕向东_Java基础视频教程第07天-0 ...

那你看1楼的答复吧,在下无能无力
作者: ccyznhy    时间: 2013-6-25 00:08
写出三个代码大家看下
class Father
{
         int num=1;
}
class Son extends Father
{
         int num=3;
         void show()
         {      num=2;
                 System.out.println(super.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为1
class Father
{
         int num=1;
}
class Son extends Father
{
         //int num=3;
         void show()
         {      num=2;
                 System.out.println(super.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为2
class Father
{
         int num=1;
}
class Son extends Father
{
         //int num=3;
         void show()
         {      //num=2;
                 System.out.println(this.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为1
作者: ccyznhy    时间: 2013-6-25 00:12
修改部位标注下
class Father
{
         int num=1;
}
class Son extends Father
{
         int num=3;
         void show()
         {      num=2;
                 System.out.println(super.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为1
class Father
{
         int num=1;
}
class Son extends Father
{
         //int num=3;
         void show()
         {      num=2;
                 System.out.println(super.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为2
class Father
{
         int num=1;
}
class Son extends Father
{
         //int num=3;
         void show()
         {      //num=2;
                 System.out.println(this.num);
         }
}
class StringTest

{
         public static void main(String[] args)
         {
                 Son s=new Son();
                 s.show();
         }
}
结果为1
作者: ccyznhy    时间: 2013-6-25 00:13
神之梦 发表于 2013-6-25 00:07
那你看1楼的答复吧,在下无能无力

哥们帮忙看下我之后写的代码,能解释下么?
作者: 神之梦    时间: 2013-6-25 00:21
ccyznhy 发表于 2013-6-24 23:51
发错了 时间是13:00--13:15

老师的那句话是引出多态,不是说super.num就能打印出子类的2
接着往后看,也许你可以理解的透彻些
作者: ccyznhy    时间: 2013-6-25 00:25
神之梦 发表于 2013-6-25 00:21
老师的那句话是引出多态,不是说super.num就能打印出子类的2
接着往后看,也许你可以理解的透彻些 ...

我的代码分别都指的是什么?能帮忙解释下么
作者: 神之梦    时间: 2013-6-25 00:29
ccyznhy 发表于 2013-6-25 00:13
哥们帮忙看下我之后写的代码,能解释下么?

第一段修改后的代码,子类show方法里面的num前面省略了this,num=2修改的是子类num的值,对父类num的值不影响,所以打印super.num结果为1.

第二段和第三段,因为子类中没有自定义新的num,show方法里的num是从父类中继承过来的,所以super.num结果为2,第三个为1应该就更好理解了吧

就如楼主讲的那节视频,其实老师在视频中讲得比较明白了,只是楼主可能还没看到多态,对super的概念不是特别清楚,,,,
作者: ccyznhy    时间: 2013-6-25 00:54
神之梦 发表于 2013-6-25 00:29
第一段修改后的代码,子类show方法里面的num前面省略了this,num=2修改的是子类num的值,对父类num的值不 ...

多谢多谢,哥们已经在黑马学习了么?

作者: 袁梦希    时间: 2013-6-25 09:41
你俩都是大神  一顿讨论  哈哈
作者: 袁梦希    时间: 2013-6-25 09:41
很牛啊
作者: 袁梦希    时间: 2013-6-25 09:41
给你多加一分    这么热情
作者: 280270738    时间: 2013-6-25 09:58
你调用的本来就是父类的num,怎么会打印子类的num呢。你要想打印子类的num把super去掉就可以了。
作者: 神之梦    时间: 2013-6-25 12:53
袁梦希 发表于 2013-6-25 09:41
你俩都是大神  一顿讨论  哈哈

希希又来寒碜我{:soso_e110:}
作者: 袁梦希    时间: 2013-6-25 12:55
神之梦 发表于 2013-6-25 12:53
希希又来寒碜我

没寒颤你   确实都是大神




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