class A
    {
        public void a()
        {
            Console.WriteLine("A.a");
        }
        public virtual void b()
        {
            Console.WriteLine("A.b");
        }
    }    class B:A
    {
        public new void a()
        {
            Console.WriteLine("B.a");
        }
        public override void b()
        {
            Console.WriteLine("B.b");
        }
    }
    class Class1
    {
               static void Main(string[] args)
        {
            B b= new B();
            A a = b;
            b.a();//B.a
            b.b();//B.b
            a.a();//A.a
            a.b();//B.b
        }
    }
}
这是我在网上找的一个例子
如果main函数里改成 
{
  B b=new B();
  A a=new A();
  a.a();
  a.b();
  b.a();
  b.b();
}
结果是什么
如果main函数里改成
{
  A a=new B()
  a.a();
  a.b();
}
结果是什么
谁能解释一下A a=new B()是什么意思

解决方案 »

  1.   

    B b=new B();
      A a=new A();
      a.a();//A.a
      a.b();//A.b
      b.a();//B.a
      b.b();//B.b
    ------------------
      A a=new B()//同例子中一样
      a.a();//A.a
      a.b();//B.b
    ------------------
    谁能解释一下A a=new B()是什么意思
    父类型(A)的引用执行子(B)类型的实例
      

  2.   

    那 A a=new B() 中a到底是A类型还是B类型
      

  3.   

    A a = new B();代表父类的引用指向子类的一个对象.但不能说就是B类型,a能调用的方法仍然是A类的,不过如果正好子类B重写了相同的方法的话,就调用子类的方法