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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

中国电力出版社《 Head First Java(中文版)》 P192页 有如下习题:
给出程序,问输出是什么。

class A{
        int ivar=7;
               
        void m1(){
        System.out.print("A's m1,");
        }

        void m2(){
        System.out.print("A's m2,");
        }

        void m3(){
        System.out.print("A's m3,");
        }
}


class B extends A{
       
        void m1(){
        System.out.print("B's m1,");
        }
}


class C extends B{

        void m3(){
        System.out.print("C's m3,"+(ivar+6));
        }
}


public class Mix{
        public static void main(String[] args){

        A a = new A();
        B b = new B();
        C c = new C();
        A a2 = new C();

        b.m1();
        c.m2();
        a.m3();
        System.out.println("");
        System.out.println("");

        c.m1();
        c.m2();
        c.m3();
        System.out.println("");
        System.out.println("");

        a.m1();
        b.m2();
        c.m3();
        System.out.println("");
        System.out.println("");
       
        a2.m1();
        a2.m2();
        a2.m3();
        System.out.println("");
        System.out.println("");
        }//end of main()

}




书中P195页给答案的是:
B's m1,A's m2,A's m3,
B's m1,A's m2,C's m3,13
A's m1,A's m2,C's m3,13
B's m1,C's m2,A's m3,

发现最后一组有问题,但还不确定。主要是因为自己对 A a2 = new C(); 的理解叫不准。
做实验,发现结果和自己的想法相同,如下:


总结:

A a2 = new C();
是生成了一个C类的对象,对象引用变量为a2, a2指向新生成的对象。

书中P185中说:“在多态下,引用与对象可以是不同类型,如:Animal myDog = new Dog(); 。两者的类型不相同。引用变量的类型被声明为Animal,但对象是Dog”。读了这句话,就明白了,对象是Dog!!

所以,此题中,a2是引用对象,指向C类的对象,而非A类的对象。




P.S. 虽然书中有错误,但《Head First Java》这本书还是不错的。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

3 个回复

正序浏览
sil 发表于 2013-9-20 08:42
我是在京东买的。不过我也常在亚马逊买书。还好吧?

这本书有时候有点戏谑的语气,我觉得看英文原版的对 ...

要的就是高端大气上档次哈
回复 使用道具 举报
冯晓骏 发表于 2013-9-19 19:23
英文版各大网站都缺货。。Amazon又有点信不过。。蛋疼

我是在京东买的。不过我也常在亚马逊买书。还好吧?

这本书有时候有点戏谑的语气,我觉得看英文原版的对我来说太高端大气上档次了,所以选了中文版低调奢华有内涵。
回复 使用道具 举报
英文版各大网站都缺货。。Amazon又有点信不过。。蛋疼
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马