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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ccyznhy 中级黑马   /  2013-6-24 19:46  /  1957 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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”?
顺便问一句怎样讲已经解决的问题从“未解决”变成“已解决”?
新手提问,请各位前辈指点迷津。。。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

19 个回复

倒序浏览
你调用的就是父类的,怎么打印子类,
想打印子类的,直接num或者this.num
你这个思路本身就不对
继承就是要从父类身上得到一些东西,你还非要用父类得到子类的东西

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
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();
         }
}
这样算不算你要的答案

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
神之梦 发表于 2013-6-24 22:34
class Father
{
         int num=1;

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

那你看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();
         }
}
结果为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
回复 使用道具 举报
修改部位标注下
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
回复 使用道具 举报
神之梦 发表于 2013-6-25 00:07
那你看1楼的答复吧,在下无能无力

哥们帮忙看下我之后写的代码,能解释下么?
回复 使用道具 举报
ccyznhy 发表于 2013-6-24 23:51
发错了 时间是13:00--13:15

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

我的代码分别都指的是什么?能帮忙解释下么
回复 使用道具 举报
ccyznhy 发表于 2013-6-25 00:13
哥们帮忙看下我之后写的代码,能解释下么?

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

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

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

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

点评

还木有,其实我也是菜鸟一只⊙﹏⊙b汗  发表于 2013-6-25 12:52

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 如此热情,多加1分

查看全部评分

回复 使用道具 举报
你俩都是大神  一顿讨论  哈哈
回复 使用道具 举报
很牛啊
回复 使用道具 举报
给你多加一分    这么热情
回复 使用道具 举报
你调用的本来就是父类的num,怎么会打印子类的num呢。你要想打印子类的num把super去掉就可以了。
回复 使用道具 举报
袁梦希 发表于 2013-6-25 09:41
你俩都是大神  一顿讨论  哈哈

希希又来寒碜我{:soso_e110:}
回复 使用道具 举报

没寒颤你   确实都是大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马