A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩俊 中级黑马   /  2012-12-2 18:08  /  1036 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承和接口的区别在哪?能不能详细点?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

3 个回复

倒序浏览


    C#接口定义

    C#不支持多重继承,但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口的概念。通过接口可以实现多重继承的功能。

    实现接口的类或结构要与接口的定义严格一致。接口描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。

    类和结构可以像类继承基类或结构一样从接口继承,而且可以继承多个接口。当类或结构继承接口时,它继承成员定义但不继承实现。若要实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器。例如,接口可以声明一个带有get访问器的属性,而实现该接口的类可以声明同时带有get和set访问器的同一属性。但是,如果属性或索引器使用显式实现,则访问器必须匹配。

    接口可以继承其他接口。类可以通过其继承的基类或接口多次继承某个接口。在这种情况下,如果将该接口声明为新类的一部分,则类只能实现该接口一次。如果没有将继承的接口声明为新类的一部分,其实现将由声明它的基类提供。基类可以使用虚拟成员实现接口成员,在这种情况下,继承接口的类可通过重写虚拟成员来更改接口行为。

    定义接口

    接口的声明采用下列格式:

    修饰符interface接口名称:继承的接口列表

    {

    接口内容;

    }

    其中,除interface 和接口名称,其他的都是可选项,下面是一个C#接口定义的例子,代码如下:

    public interface iSomeInterface { void UpdateDataBase(); }

    接口继承

    一个接口可以从一个或多个基接口继承。例如:

    interface iOthrerInterface :iSomeInterface,iCom { int CompareTo(object obj); }


回复 使用道具 举报
接口继承和类继承不同:
                首先, 类继承不仅是说明继承, 而且也是实现继承,  也就是说, 派生类可以继承基类的方法实现,  而接口继承只是说明继承, 没有继承父接口的实现.
                其次, C#中类继承只允许单继承, 但是接口继承允许多继承, 一个子接口可以有多个父接口.
回复 使用道具 举报
抽象類就像父親一樣,你繼承了他,但也可以改變(override/new)一些。而接口更像一個使命,你只能去實現這個使命。繼承和實現是不一樣的,至少出發點不一樣。

因此那些答案也不難理解了,比如接口必須要實現,抽象方法不一定要實現,可以默認的用抽象類的。

    public class MyCustomer : Customer, ICustomer
    {
        public override void Fun()
        {
            Console.WriteLine("abstract class fun");
        }

        void ICustomer.Fun()
        {
            Console.WriteLine("interface class fun");
        }
    }

    public abstract class Customer
    {
        public abstract void Fun();
    }

    public interface ICustomer
    {
        void Fun();
    }

因此,在C#中複寫抽象類的抽象方法,編譯器會強調要加override,而實現接口則不需要。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马