已知Son是Father的子类,那么:
1> Son s1 = new Son();
2> Father s2 = new Son();
以上两种对象的初始化方式有何区别(除了s1是Son类型,s2是Father类型),还有一般在什么情况下使用第二种初始化方式啊?谢谢

解决方案 »

  1.   

    Father s2 = new Son(); 
    =======================
    lz想说的应该是Father* s2 = new Son(); 吧
    将一个子类对象付给一个父类指针;
    至于什么情况下用,可能在父类有虚函数的时候会用到,具体看需求
      

  2.   

    不好意思,我是在学Java时遇到的问题。帖子一开始被我错发到C++板块区了。
      

  3.   

    Father s2 = new Son()
    说明Son是Father的子类
    把子类对象看作父类对象称为 向上转型详细参看<thinking in java>  复用类 和 多态 两章
      

  4.   

    s1,s2都是son对象的引用,但s2不能访问son对father的扩展部分。
      

  5.   

    Father s2 = new Son(); 
    S2中只具有Father中定义的方法,子类中另外定义的方法(父类中没有的)不能用,想用的话要强制类型转换成子类的引用才能用
      

  6.   

    具体需要看你声明这个对象用来做什么, 如果仅仅用到father的特性,就声明为father, 否则声明为son.
    另外多态时, 如果有重载的方法存在, 这会决定调用哪个方法。 比如:
    public void method(Father father) {}
    public void method(Son son){}
    这种情况下, 调用method方法, 具体调用哪个就决定于你声明时的类型。