如下程序的运行结果是:
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
} public class B: A
{
public B()
{
Console.WriteLine('B');
} public new void Fun()
{
Console.WriteLine("B.Fun()");
} public static void Main()
{
A a = new B();
a.Fun();
}
}
1. A B A.Fun()
2. A B B.Fun()
3. B A A.Fun()
4. B A B.Fun()
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
} public class B: A
{
public B()
{
Console.WriteLine('B');
} public new void Fun()
{
Console.WriteLine("B.Fun()");
} public static void Main()
{
A a = new B();
a.Fun();
}
}
1. A B A.Fun()
2. A B B.Fun()
3. B A A.Fun()
4. B A B.Fun()
A a=new B();这一句,因为继承所以先调用A()再调用B();输出A,B.
a.Fun();这里为什么没有表现出多态,运行时的B的方法呢,因为B用了new ,用new关键字后的Fun()方法与多态无关了,所以可以看成没有方式,而调用继成的A.Fun().如果用override则会是B.Fun();
选 1. A B A.Fun() 个人理解:
1,因为new 的是B()所以先走 B的类,而A是B的基类,所以调用的时候先调用A的构造函数,然后再调用B的构造函数。也就产生了 A B 的效果。
2,声明的是A的对象。所以在调用函数的时候走的是A的成员函数而不是B的。
a = (A)a;
a.Fun(); //输出A.Fun()
调用引用类型的还是对象的类型的方法怎么确定的