【一次性搞懂】继承与接口的区别,以及继承中的override与new的区别

本文探讨C#中的继承与接口的区别,指出C#单继承与接口多继承的特点,以及接口强制实现所有方法的要求。同时,解释了override与new在方法覆盖中的不同:override通过引用传递,保持外部值同步;而new则产生备份,不影响原始数据。此外,文章预告将进一步解释为何需要继承及override和new的必要性。
摘要由CSDN通过智能技术生成

继承与接口的区别

· C#只支持单继承,而接口则可以实现多继承。
· 继承父类的子类不一定要实现父类中的所有方法,但继承接口的类必须实现接口中的所有方法。
· 父类中的方法可以是虚方法,也可以是非虚方法,但接口中的所有方法都只能是虚方法。
· 父类中的字段、属性以及方法等可以使用除public以外的访问修饰符,但接口中的方法只能使用public修饰符(并非不能,只是不这么做接口的意义就没了)。
· 父类中可以定义字段(类似”string str”这样的叫做字段),而接口中只能定义属性(类似”public string {get; }”这样的叫做属性)。

以上讲的这些大概就是继承与接口的区别了。我一直觉得如清单般的罗列条目是一种糟糕的分享方法。在力所能及的范围内,我更乐于究其原理,因为只有明白了原理才能建起逻辑的大厦,并以此衍生推理。因此我讲讲我个人对它们二者的理解吧。
无论是实现继承,还是接口继承,我们通常都视之为继承。在我初识它们的时候我觉得它们完全就是一样的东西,但是后来我发现它们在功能上还是有不小的差别的。**实现继承体现的目的是为了使代码的层级结构更清晰,同时也是编程语言模块化的体现(这一点在后面讲override与new的区别时还会再讲)。**而接口则并不直接服务于这种需求,接口存在的目的是为了规范化实现了它的类。什么叫规范化?为什么要规范化?举个例子,我们在生活中也总是会遇到接口,譬如你的苹果手机没电了,正准备向别人接根电源线给自己的手机充电,那么很显然你决不会向我借我的小米数据线,因为你很清楚我的小米数据线和你的苹果手机接口不匹配。而我认为C#中的接口与这个例子中接口的意义是类似的。无论是苹果手机还是小米手机,他们都为自己的数据线制定了一套不可改变的标准,其中可能包括制定了他们各自的充电通路和数据通路等,且不说接口不同就无法插上,就算有人强行插上了不同接口的数据线,那么他的手机轻则无法正常充电,重则可能直接爆炸损毁。编码是现实生活的体现,因此在生活可能遇到的情况,在编码时肯定也是可能遇到的。假如C#中没有接口,而我们又无法避免在构建一个类时可能出现的纰漏,那么就有可能出现拿刚造出的小米数据线给苹果手机充电的可能。

overrider与new的区别

首先,override与new确实几乎没有区别。在我第一次接触到C#中的override与new时,我的老师和网上的几乎所有人一样,告诉我一个是重写,一个是覆盖,然后演示了一下类似于猫类继承动物类之后的调用结果,再然后。。。再然后就没有然后了,因为在子类中无论是使用override还是new重写/覆盖的父类方法,都依然可以调用到父类中的同名方法。
今天看书的时候又看到了这块,突然就来了感觉,于是自己试验了一下,发现似乎确实也没有问题了,于是决定把今天的试验结论写下来。

通常情况下,override与new没有任何差别,那么什么情况叫通常情况呢?直接上代码:

(1) 按照国际惯例,首先,咱们得创建一个父类

using System;

namespace MyCSharpStudy
{
    class Father
    {
        public string name;

        public Father(string name) {
            this.name = name;
        }

        public void GetName() {
            Console.WriteLine("I'm father : {0}.", name);
        }

        public virtual void VirtualGet() {
            Console.WriteLine("This is father's method.");
        }
    }
}

(2) 然后是子类

using System;

namespace MyCSharpStudy
{
    class Child:Father
    {
        public Child(string n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值