关于子类实例化父类的使用,当父类类型变量指向子类实例的引用。调用的是子类还是父类的方法、字段?如
class A
{
//.....
}
class B:A
{
//....
}A a1=new B(); //当子类与父类出现同名字段的时候,调用的子类的字段还是父类的,当同名的字段为不同的修饰的时候(如private、public等)又是什么情况呢?
当子类和父类出现同名方法的时候,调用的是子类的方法还是父类的方法?我在VS上试验过 一次   结果是当子类和父类有同名字段且都未public时,调用父类的字段,子类的方法。这是为什么呢?  搞不明白各位高手能不能简单详细的讲明白个中原理呢?我 疑惑两天了

解决方案 »

  1.   

    private的话不能访问,在父类调用就是父类的方法,子类调用就是子类的方法,如果是public,调用哪个类取决于是否virtual,如果是virtual修饰的方法,则总是调用子类方法,否则,引用是什么调用什么类的方法,
      

  2.   


    还是不太明白,能结合具体例子说明下吗?
    比如我问题的事例
    A a1=new B();类A和类B都有相同的字段和方法呢,是不是只与类型有关 ,调用A类中的方法和字段?
      

  3.   

    如果子类和父类都用override重写了一个基类的abstract方法呢?
    用这样  A a1=new B();
    怎么调用?
      

  4.   

    abstract和virtual是一样的,只要override都会只调用子类的方法,不论引用类型如何,至于字段,和方法一样,也有virtual和override,
      

  5.   

    先把帖子结了    呵呵 目前有点明白了,
    我在VS上自己不断的试验  呵呵 谢谢  stonespace