1.ex.output();会调用子类的构造函数
创建实例是创建父类的实例所以y=2
2.重用相当于继承,重载相当于同名但执行的程序和效果不同,防止程序执行混乱导致编译器不知调用哪个函数,重写相当于覆盖。
3.是子类调用父类的继承机制也就是子类变量的指针存储了父类的对象,虽然JAVA中无指针的概念,但只是说不能用指针,没说不让这样想。如果你这样想你会觉得很舒服。其实覆值也可以作为指针的概念。

解决方案 »

  1.   

    重用?reuse?俺劝你别陷入那么多,只要区分出“overload”和“override”就可以了。
      

  2.   

    1、x=100容易理解,因为f对象和ex对象的x和output都有自己的存空间,而ex是s类的对象,当然调用s的output和x。
    y=2,我也不知道该怎么理解了,。
    2、
    重涌因该是指代码的重复只用,减少开发的工作量。
    重载是oo里多态的一种表现,是指调用对象时子类函数代替父类函数。
    重写是什么我也不清楚,好象很多计算机的领域多有这个概念啦。
    3、
    这个考虑到程序的通用性啊,比如你写一个Animal类,然后派生出Dog、Cat,当你在主程序里调用时可以用animal.getFood(),而不必if(myObj.instanceOf(Dog){(Dog)myObj.getFood();}else if(myObj.instaceOf(Cat)){(Cat)myObj.getFood();}
    个人意见,仅供参考。
      

  3.   

    TO jan4984(Janny) :<<重载是oo里多态的一种表现,是指调用对象时子类函数代替父类函数。>>
    这句理解得不对。overload不是这个意思。<<重写是什么我也不清楚,好象很多计算机的领域多有这个概念啦。>>
    应该就是覆盖/覆写的意思,是override。
      

  4.   

    f  ex=new  s();
    这种是多态,应为f 与s是父子关系所以可以这样使用。
    对于ex来说编译和运行时的状态不同。
    ex.output()是访问的子类的方法。这是运行时
    ex.y
      

  5.   

    ex.y是编译时状态,只要涉及到编译器 ex就是一个f类,所以构造ex是用的f的构造方法所以
    ex.y=2
    实际上在编译的时候ex.output()也是是按照f类的方法编译的,而在运行时变成了s的output()方法所以输出了x=100
      

  6.   

    override 和 overload  ....了解这些就够了!
    其它的先不用考虑.要不越来越胡涂!