C# 接口和继承

接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。

例1:

using System;/**
 假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。
现在公司来了一个项目,要求派某个程序员写一个程序。
 */
namespace ConsoleApplication2
{
    //VB程序员
    class VBpro
    {
        public void WriteCode()
        {
            Console.WriteLine("我用vb写代码");
        }
    }
    //C程序员
    class Cpro
    {
        public void WriteCode()
        {
            Console.WriteLine("我用c写代码");
        }
    }
    //编写项目类
    class Pro
    {
        public void WriteProgram(VBpro program)
        {
            program.WriteCode();
        }
        public void WriteProgram(Cpro program)
        {
            program.WriteCode();
        }
    }
    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Pro p = new Pro();
            VBpro p1 = new VBpro();
            p.WriteProgram(p1);
            Cpro p2 = new Cpro();
            p.WriteProgram(p2);
            Console.ReadKey();
        }
    }
}

/**
 但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类C#程序员类,同时在此项目类中要再次
 重载WritePrograme(C#pro programer)方法。这下麻烦多了。如果还有C++程序员,JAVA程序员呢。但是如果改用接口,就完全不一样了
 */
namespace ConsoleApplication2
{
    //申明一个程序员接口
    public interface IProgramer
    {
        void WriteCode();
    }
    //vb程序员
    class VBpro : IProgramer
    {
        public void WriteCode()
        {
            Console.WriteLine("我用vb写代码");
        }
    }
    //c程序员
    class Cpro : IProgramer
    {
        public void WriteCode()
        {
            Console.WriteLine("我用c写代码");
        }
    }
    //编写项目类
    class Pro
    {
        public void WriteProgram(IProgramer iprogramer)
        {
            iprogramer.WriteCode();
        }
    }
    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Pro p = new Pro();
            VBpro p1 = new VBpro();
            p.WriteProgram(p1);
            Cpro p2 = new Cpro();
            p.WriteProgram(p2);
            Console.ReadKey();
        }
    }

}

运行结果:

例子2:

using System;
namespace ConsoleApplication1
{
    public interface Ichoose
    {
        void on();
        void off();
    }

    public class TV : Ichoose
    {
        private string name = "test1";
        public void on()
        {
            Console.WriteLine("{0}电视打开了", this.name);
        }

        public void off()
        {
            Console.WriteLine("{0}电视关闭了", this.name);
        }
    }

    public class Ice : Ichoose
    {
        private string name = "test2";
        public void on()
        {
            Console.WriteLine("{0}冰箱打开了", this.name);
        }
        public void off()
        {
            Console.WriteLine("{0}冰箱关闭了", this.name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TV tvString = new TV();
            tvString.on();
            tvString.off();
            Ice iceString = new Ice();
            iceString.on();
            iceString.off();
            Console.ReadKey();
        }
    }
}

运行结果:

接口的继承

C#中接口可以多继承,接口之间可以相互继承和多继承。一个类可以同时继承一个类和多个接口,但是接口不能继承类。

using System;

/**
 假如你是一名在职学生,你就具有双重身份。一个身份是学生,必须完成学习任务,一个身份是职员,必须完成工作任务。进一步说,你是计算机类学生,除了学习基础课程,
 还必须学习C#程序设计。现在建立一个模型,应该如何建立?
 1.我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。
 2.计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。
 */
namespace ConsoleApplication3
{
    //定义学生接口
    public interface IStudent
    {
        void study_base();
    }
    //定义职员接口
    public interface IEmployee
    {
        void work();
    }
    //定义计算机类学生接口
    public interface IIStudent : IStudent
    {
        void study_computer();
    }

    public class Infostudent : IEmployee, IIStudent
    {
        //实现学生接口
        public void study_base()
        {
            Console.WriteLine("数学、语文和英语必须学好");
        }
        //实现职员接口
        public void work()
        {
            Console.WriteLine("工作必须完成");
        }
        //实现计算机类学生接口
        public void study_computer()
        {
            Console.WriteLine("计算机类的学生除学好基础课外,还要学C#");
        }
    }

    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Infostudent infostudent = new Infostudent();
            infostudent.study_base();
            infostudent.work();
            infostudent.study_computer();
            Console.ReadKey();
        }
    }
}

运行结果:

总结:接口之间继承表示方法和类继承是相同的,继承的规则也是相同的,即子接口获得父接口的内容,如果有多个接口,接口之间用","隔开。

原文地址:https://www.cnblogs.com/wwwbdabc/p/11280341.html

时间: 2024-10-12 05:41:49

C# 接口和继承的相关文章

一个接口能否继承另一个接口?一个抽象类能否实现一个接口?

都可以: 一.一个接口能否继承另一个接口? 接口继承接口  本质就是一个抽象类继承另一个抽象类(它们都没写方法的实例).当一个类继承了一个抽象类,它必须要重写父类 抽象类中的抽象方法,如果不去重写父类抽象方法的实例,那么这个类也是抽象类(这个抽象子类,直到重写这个抽象方法的实例为止, 才能摆脱抽象的命运).其实我们想想,一个类去实现一个接口也不就是一个实体子类把一个抽象的所以抽象方法实例化(重写了 抽象父类 中全部抽象方法),当然抽象类和接口还是有区别的.我上上篇就写到了抽象类和接口的区别,有兴

接口多继承自接口和接口是否可以继承自一般类的疑问?

接口是常量值和方法定义的集合.接口是一种特殊的抽象类. Java类是单继承的.classB Extends classA java接口可以多继承.Interface3 Extends Interface0, Interface1, interface-- 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢? 但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口. 注意: 1)一个类如果实现了一个接口,则要实现该接口

C#接口多继承方法重名问题

最近实现一个功能需要继承两个接口,然而父类接口有这重名的方法,且方法实现一致.两个父接口均被多个子接口继承,并在类实例中实现.起初,我是通过new重名方法来实现我的功能调用.后被指正,在网上看了一个工友解决类似问题的方法,这里引用记录一下. 引自:http://www.cnblogs.com/xgw2004058/archive/2010/06/18/1760046.html 经常,一个类会实现多个接口,比如用户的一个控件继承自"IEdit"和"ICombo",每个

接口、接口优点、接口的属性和方法特性、接口与继承的区别、接口与抽象类的区别、匿名实现类、JDK1.8新特性、打印类名称

接口里的属性,必须是公共的/默认的&静态的&Final&初始化后的属性: 接口里所有方法都是抽象的. 接口和继承---先天有的用继承,后天学习的用接口: 接口特性-------- 1.接口不可以被实例化: 2.实现类必须实现接口中所有方法,否则实现类必须是抽象类 3.实现类可以实现多个接口,来弥补Java不能多继承: 4.接口中的变量都是静态常量:(静态的-可以通过类的名字点-直接调用:) ----------------------------------------------

类与接口的继承 接口与抽象类 抽象工厂

为什么Java里面只允许单一继承,但允许实现多个接口? 1,接口可以继承多个接口.为什么不能实现类的多继承?主要是防止多个类有相同的方法名,然而方法体不一样,子类就比较难选择了.所以java和C#不支持类的多继承2,允许具有多个接口的一个好处就是,当实现多个接口时,如果两个接口有同样的方法,那么实现一次就可以了.由于接口没有方法体,所以接口可以实现多继承. 如何间接实现类的多重继承? 1.可以通过继承多个接口实现多重继承. 2.A -> B -> C .

接口、继承、多态

接口.继承.多态 继承和多态是面向对象开发语言中非常重要的饿一个环节,如果在程序中使用继承和多态得当,整个程序的架构将变得非常有弹性,通知书可以减少代码的冗余性. 继承机制的使用可以复用一些定义好的类,减少重复代码的编写.多态机制的使用可以动态调整对象的调用,降低对象之间的依存关系. 1.继承机制中子类的结构化过程 子类的所构造函数,默认都会访问谷类中控参数的构造函数:因为,子类每一个构造行数内的第一行都由依据隐式的super(); 子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,

Java基础10 接口的继承与抽象类(转载)

接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: interface Cup{    void addWater(int w);    void drinkWater(int w);} 我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup 接口如下: interface MetricCup extends Cup{    int WaterContent

java接口可以继承多个接口

接口是常量值和方法定义的集合.接口是一种特殊的抽象类. java类是单继承的.classB Extends classA java接口可以多继承.Interface3 Extends Interface0, Interface1, interface…… 不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承那一个呢? 但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口. 注意: 1)一个类如果实现了一个借口,则要实现该接口

Java基础知识强化之集合框架笔记67:Map集合面试题之List,Set,Map等接口是否继承自Map接口

1. List,Set,Map等接口是否继承自Map接口? • List,Set不是继承自Map接口,它们继承自Collection接口• Map接口本身就是一个顶层接口

关于类、抽象类和接口的继承关系

关于类.抽象类和接口的继承关系 一.类和抽象类 当实体类Impl继承一个抽象类Abstract,该实体类Impl可以不用实现抽象类Abstract中的所有方法,但是必须实现抽象类中的所有抽象方法. 二.类和接口 当实体类Impl直接实现接口Interface,那么该实体类Impl必须是想接口Interface里面的所有接口方法. 三.抽象类和接口 当抽象类Abstract实现接口Interface,抽象类可以实现接口中的部分接口方法,也可以完全不实现任何接口方法. 理解:因为抽象类的功能类似接口