zoukankan      html  css  js  c++  java
  • C# 接口(3)

    这么半天说了如何使用,实现接口。相信也都发现了接口和抽象类很多相似的地方。

    但是!

    这两个根本就是不一样的。

    抽象类 :                                                                      接口:

             可以实现代码【非抽象方法】                                   不可以实现任何代码

             唯一继承                                                                       多次继承

             继承会延续下去                                                           继承只会存在与第一次继承

    这个基本就是这两个最大的区别

    那么 接口的实现和抽象类的重写是差不多的吗?

    其实还是不一样的。

    抽象类的重写是必须使用关键字override。

    接口的实现是不需要关键字。

    还有

    抽象类的抽象方法,抽象属性在被子类再次继承时是可以再次重写。

    接口则是无法再次重写。

    代码:

     interface IHuman
        {
            string Name { get; set; }
    
            void Eat();
        }
        interface ILanguage
        {
            void Say();
        }
        class Iam : IHuman, ILanguage
        {
            string IHuman.Name { get; set; }
    
            void IHuman.Eat() => Console.WriteLine("");
    
            void ILanguage.Say()
            {
                
            }
        }
        class IamSon : Iam//此处代码报错
        {
            override void Eat() => Console.WriteLine("吃吃吃");
        }

            如果在IamSon类的Eat()方法使用new关键字,也会警告,因为Eat方法并不需要隐藏基类。

           这是为什么呢?

          代码:

        interface IHuman
        {
            string Name { get; set; }
    
            void Eat();
        }
        interface ILanguage
        {
            void Say();
        }
        class Iam : IHuman, ILanguage
        {
            string IHuman.Name { get; set; }
    
            void IHuman.Eat() => Console.WriteLine("");
    
            void ILanguage.Say()
            {
                
            }
        }
        class IamSon : Iam
        {
    
        }
        class Program
        {
    
            static void Main(string[] args)
            {
                Iam iam = new Iam();
    
                (iam as IHuman).Eat();
    
                IamSon iamSon = new IamSon();

    iamSon.Eat();//此处代码报错 (iamSon
    as Iam).Eat();//此处代码会报错 Console.ReadKey(); } }

    正常来说继承会延续下去,会继续遗传,但是显示接口的类的被继承之后,所显示的接口是无法延续下去。

    换句说,接口的继承只具有一次性。

  • 相关阅读:
    [eZ publish] Get Start a new eZ Publish projectTwo
    [eZ publish] Get Start a new eZ Publish projectOne
    [Ubuntu] Ubuntu8.10下NetBeans6.5中文变成方块解决
    [Ubuntu] 安装/卸载 声卡驱动
    [eZ publish] Url filter
    [eZ publish] How to use multiple pagelayouts
    [Ubuntu] 给系统监视器加个快捷键
    [Ubuntu] 如何添加自定义命令
    软件的价值(转)
    C语言程序收集
  • 原文地址:https://www.cnblogs.com/T-ARF/p/9227526.html
Copyright © 2011-2022 走看看