public 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();
}
} public 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();
}
}
{
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();
}
} public 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();
}
}
{
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();
}
}
A是B的父类。
声明一个父类的引用,分配创建一个子类对象。使用父类的引用指向子类的对象。这样好理解点动物 obj = new 人();
因为B继承了A,这句话的意思是声明一个基类A,但是把它实例化为B,那么这个a对象是B类的一个实例,只能实现B从A类中继承的方法。即只能实现基类A中的方法,所以那个a.Fun();输出的是
Console.WriteLine("A.Fun()");而
可以这样理解吗?new B()//初始化B,执行B的构造函数
由于B继承A,先回执行A 的构造函数然后把初始化的对象B指向A a的引用
这样说
也就是
new B()-->初始化对象,执行构造函数-->一块内存
A a-->就是一个引用,
a=new B()-->这个引用a,指向这块内存new B()
还有个地方
请教下 a.Fun()-->运行之后的结果
为什么是A.Fun()
而不是B.Fun()
public new void Fun()
这里你并没有重载,而是编写了一个同名的方法覆盖了基类方法。
A a = new B();
此时a是指向new B()的
但是又继承A
所有B也可以调用这个方法
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
而class B里面用了
public new void Fun()
来覆盖基类的方法如果改为
public new void Fun()--> public override void Fun()
a.fun()的结果就是B.Fun()这样理解对吗?
你12#描述的也对。