C#中如果父类的虚拟方法被子类重写,那么调用父类方法的时候是不是直接执行的是子类重写的方法呢

同标题... 同标题 展开
 我来答
sun_kangqi
2013-07-12
知道答主
回答量:3
采纳率:0%
帮助的人:3940
展开全部
这个要看你的引用了,如果你用子类创建的对象,那么自然是子类的方式。如果用你类的引用的,就是父类的方法。
比如:
class BaseClass {
public virtual void A(){}
}

class ExtendClass : BaseClass {
public overwrite void A(){}
}

这时如果是 ExtendClass a = new ExtendClass(); a.A(); //子类方法
如果是BaseClass a = new ExtendClass(); a.A(); //子类方法
如果是BaseClass a = new BaseClass(); a.A(); //父类方法
清水栞
2013-07-12 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:978万
展开全部
是的,是按你定义的那个变量的类型来执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李晓gogogo
2020-08-21 · TA获得超过102个赞
知道答主
回答量:16
采纳率:0%
帮助的人:1.4万
展开全部

重写的含义是:子类不想再隐式继承父类同名方法,它想拥有自己的同名方法以输出不同的内容——并不会对父类原有方法造成改变


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace ConsoleApplication1

{

    //父类

    public class FatherClass

    {

        public virtual void F()

        {

            Console.WriteLine("父类方法");

        }

    }

    //子类1 重写父类方法

    public class ChildClass1:FatherClass

    {

        public override void F()

        {

            Console.WriteLine("子类1方法");

        }

    }

    //子类2 在子类1重写了父类方法后,再次调用父类方法,看父类方法是否发生了改变,即是否变成了子类1重写的方法

    public class ChildClass2: FatherClass

    {

      

    }



    //主函数类

    class Program

    {

        static void Main(string[] args)

        {

            ChildClass1 cc1 = new ChildClass1();

            cc1.F();//输出结果是“子类1方法”


           


            ChildClass2 cc2 = new ChildClass2();

            cc2.F();//输出结果仍然是是“父类方法”



            Console.ReadKey();

        }

    }

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangweijun1991
推荐于2017-11-25 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:83
采纳率:0%
帮助的人:79.1万
展开全部
class Program
{
public Program()
{
Console.WriteLine("父类构造方法");
}

public virtual void show()
{
Console.WriteLine("父类同名方法");
}
}

class sonProgram : Program
{
public sonProgram()
{
Console.WriteLine("子类构造方法");
}

public override void show()
{
Console.WriteLine("子类同名方法");
}
}

public class demo
{
public static void Main(string[] args)
{
Program pr = new sonProgram();
pr.show(); //父类构造方法 子类构造方法 子类同名方法

Program p = new Program();
pr.show(); //父类构造方法 子类同名方法
}
}

要养成这个习惯遇到什么疑问就去用程序来证明,你说的这个是 直接执行子类的方法,父类方法被覆盖了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灬觺觺diane
2013-07-12 · 超过31用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:90.1万
展开全部
是的啊 嗯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式