前提:A类是B类的父类
问题:
A a = new B();
是不是等同于 
B b = new B();
A a = (A)b;//或者是 A a = b;
我是从asp转过来的。这两天被这个问题弄混了头,希望大家不吝赐教,也希望高手能把多态这块给咱好好洗洗脑!

解决方案 »

  1.   

    -_-!!! 好好看看: http://blog.csdn.net/cheng_feng001/archive/2007/11/29/1906727.aspx
      

  2.   


    显示和隐士转换
    http://txhelp.net
      

  3.   

    是对的。A a = new B(); 
    等同于B b = new B(); 
    A a = (A)b;或者是 
    A a = b; 
      

  4.   

    理解正确。
    楼上的人都new B();
      

  5.   

    b可以创建a的对象 b完全继承a 但b里的方法,钩造等等 a不一定有 我的理解
      

  6.   

    呵呵,楼上的都是正解。
    A a = new B(); 父类指向子类
      

  7.   

    A a = new B(); 
    是等同于  
    B b = new B(); 
    A a = (A)b;//或者是 A a = b; 
    这个对吗,好像不对吧
    B b=(B)a才对吧
      

  8.   

    A是B的父类,还可以A a = (A)b这样转换类型吗?好象应该只能从父类类型转换成子类类型吧。。请教达人
      

  9.   

    你好,那为什么不直接使用 B b = new B();
    那么做能有什么好处?还是能多出什么方法?
      

  10.   

    http://blog.csdn.net/cheng_feng001/archive/2007/11/29/1906727.aspx
    这篇文章很值得看的
    理解的很透彻
    看了会明白很多
      

  11.   


    当B继承A里方法时,如果A中是 virtual 的,B中用 override 和 new 两个关键词来重写的时候,再调用该方法就会产生不同的结果了。
      

  12.   

    说错了,不好意思。。父类转换成子类需要显示转换,但是有些语言中(如VB)是不需要的,.NET框架书中提到过,class Employee类隐式继承自object,在Employee e=(Employee) o(o是object类型)中需要显式转换,但是Object o=new Employee()就不需要显示转换
      

  13.   

    前提:A类是B类的父类 
    问题: 
    A a = new B(); 
    是不是等同于  
    B b = new B(); 
    A a = (A)b;//或者是 A a = b; 
    我是从asp转过来的。这两天被这个问题弄混了头,希望大家不吝赐教,也希望高手能把多态这块给咱好好洗洗脑!
    不完全等同,A a = new B(); 不能使用B类自己添加的方法.比如 public abstract class A
    {
       public string Method()
          return "A method";
    }public class B:A
    {
       public string MyMethod()
       return "B method";
    }
    这时候A a=new B();则不能使用MyMethod方法
      

  14.   

    这个很简单啊,就是简单的类型转换
    mytype m1 = new mytype();object o ;
    mytype m2;
    yourtype t1;o=m1; //m是o的子类型,可以隐式转换
    m2=(mytype)o ; //o是m的父类型,不能隐试转换,要强制转换t1=(yourtype)o; //这个在编译时是不会报错的,但运行时会出错,因为o指向的对象实际是mytype
                    //是不能转为yourtype的关于多态,那就需要虚函数了。也是挺复杂的东西,还是先吧这弄清楚把
      

  15.   

    这个很简单啊,就是简单的类型转换
    mytype m1 = new mytype();object o ;
    mytype m2;
    yourtype t1;o=m1; //m是o的子类型,可以隐式转换
    m2=(mytype)o ; //o是m的父类型,不能隐试转换,要强制转换t1=(yourtype)o; //这个在编译时是不会报错的,但运行时会出错,因为o指向的对象实际是mytype
                    //是不能转为yourtype的关于多态,那就需要虚函数了。也是挺复杂的东西,还是先吧这弄清楚把
      

  16.   

    http://blog.csdn.net/cheng_feng001/archive/2007/11/29/1906727.aspx
    顶这文章,好东西
      

  17.   

    A a = new B(); 
    是不是等同于  
    B b = new B(); 
       -----------------------
    不尽然,B类的方法a不可以调用
    如果A类有虚函数,B类重写了,则b调用的是自已重写的,a调用的也是自已的A a = (A)b;//或者是 A a = b; 
           --------类型转换,a指向b
      

  18.   

    可能有点误会,我的意思是:
    A a = new B();  
    是不是等同于   
    B b = new B(); 
    A a = (A)b;
    或者
    B b = new B();
    A a = b;
    多谢指点
      

  19.   

    吃了一惊
    这不明明是调用构造函数 A::A(B *) 么
    怎的诸兄皆言继承 多态 云云?
    仔细一看,,原来C#,,晕!!
      

  20.   

    前提:A类是B类的父类 
    问题: 
    A a = new B(); ___________能这么写吗?