using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{ class Program
{ static void Main(string[] args)
{ //BaseClass mybase = new BaseClass(); BaseClass myChild = new ChildClass(); BaseClass myOverride = new OverrideClass(); myChild.getBase("leening"); myOverride.getBase("leening"); Console.Read(); } } public class BaseClass
{
public virtual void getBase(string name)
{ Console.WriteLine("base:my name is " + name); }
} public class ChildClass : BaseClass
{
public new void getBase(string name)
{ Console.WriteLine("child:my name is " + name); } } public class OverrideClass : BaseClass
{ public override void getBase(string name)
{ Console.WriteLine("override:my name is " + name); } }
}
输出:base:my name is leening override:my name is leening请问BaseClass myChild = new ChildClass();这个是什么意思?一个基类的 myChild ,用子类的构造函数去初始化
结果调用的是基类的构造函数,有点晕了
请假为什么会得出这个结果?
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{ class Program
{ static void Main(string[] args)
{ //BaseClass mybase = new BaseClass(); BaseClass myChild = new ChildClass(); BaseClass myOverride = new OverrideClass(); myChild.getBase("leening"); myOverride.getBase("leening"); Console.Read(); } } public class BaseClass
{
public virtual void getBase(string name)
{ Console.WriteLine("base:my name is " + name); }
} public class ChildClass : BaseClass
{
public new void getBase(string name)
{ Console.WriteLine("child:my name is " + name); } } public class OverrideClass : BaseClass
{ public override void getBase(string name)
{ Console.WriteLine("override:my name is " + name); } }
}
输出:base:my name is leening override:my name is leening请问BaseClass myChild = new ChildClass();这个是什么意思?一个基类的 myChild ,用子类的构造函数去初始化
结果调用的是基类的构造函数,有点晕了
请假为什么会得出这个结果?
这一句等同于
ChildClass myChild = new ChildClass();
BaseClass是父类,ChildClass是子类。
如果BaseClass和ChildClass存在继承关系,就可以这样写。
但不能写成ChildClass myChild = new BaseClass();
这个叫做委派调用,而不是什么继承。这种“自动实现无参数实例化方法”的机制是学生考试时必考的题目。对有参数的实例化方法,不会自动实现。因此如果你调用了有参数实例化,那么编译器就会给你报错,而不是自动实现你的new方法了!
BaseClass myChild = new ChildClass();
//右边 实例化,实际上 它的类型句柄指向了 父类和自己的getBase方法。姑且算分配有两个getBase方法,BaseClass.getBase 和 ChildClass.getBase。
//左边 只是类型转换而已,只是把能够转换的,属于基类,继承基类的进行转换