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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class DuotaiDemo4
{
        public static void main(String[] args)
        {
               
                People p = new People(" nokia asha");
                p.show();

        }
}

class God
{
        private String name;
        God(String name)
        {
                this.name = name;
        }
        void show()
        {
                System.out.println(name);
        }
}
class People extends God
{
        People(String name)
        {
                super(name);
        }
        void show()
        {
                super.show();
        }
}

我用子类show方法覆盖了父类的show方法,再调用应该父类的应该报错呀??怎么结果还是 nokia asha 呢?
还是不懂这些方法在内存中的状态。。。求指教




评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
子类构造器调用了super(name),那么就会执行  
God(String name)
         {
                 this.name = name;//这里将name的值赋给了成员变量,而且此时的this指向的是子类对象。this指向的具体哪个对象这点很重要。
         }
最终打印的是子类的成员变量name
回复 使用道具 举报
本帖最后由 张飞年 于 2012-9-6 22:19 编辑

如图、、、

捕获.PNG (66.1 KB, 下载次数: 21)

捕获.PNG

评分

参与人数 1黑马币 +10 收起 理由
魏亮 + 10 很给力!

查看全部评分

回复 使用道具 举报
楼主:你创建的子类的show方法想覆盖父类中的方法,但是方法主体还是父类的方法
所以和直接集成父类方法效果一样。
而你子类的构造函数中第一句隐含了一条super()语句,但是父类中没有God()构造
函数,只有God(String name)构造函数,所以子类要写super(name)语句覆盖掉

回复 使用道具 举报
class DuotaiDemo4
{
        public static void main(String[] args)
        {
               
                People p = new People(" nokia asha");//1.首先主函数先进栈,并且有一个局部变量p,然后在堆内存中开辟空间,创建了一个带实际参数的对象,并把地址值赋值给了p
                p.show();//4子类对象调用show方法

        }
}

class God
{
        private String name;
        God(String name)//3在第二步里面有解释了。
        {
                this.name = name;
        }
        void show()//最后打印输出父类的name。
        {
                System.out.println(name);
        }
}
class People extends God
{
        People(String name)//2.子类对象找到了相对应的构造函数进行初始化时,然而发先方法体执行的是一个带参数的super语句,这时就会到父类去找相对应的构造函数进行初始化,方法体里面是
                                this.name = name;这个this关键字就是那个对象调用它,它就代表的就是谁,这时是子类对象调用的,这时就是父类指向了子类对象,这时父类name就赋值为了 nokia asha
        {
                super(name);
        }
        void show()//5show方法里面是调用父类的show方法
        {
                super.show();
        }
}

我用子类show方法覆盖了父类的show方法,再调用应该父类的应该报错呀??怎么结果还是 nokia asha 呢?
还是不懂这些方法在内存中的状态。。。求指教

评分

参与人数 1黑马币 +10 收起 理由
魏亮 + 10 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马