C#中类与接口的区别讲解

一、抽象类

抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

注意:

1.抽象方法,必须存在于抽象类当中。相反,抽象类中不一定全部是抽象方法。
2.抽象方法没有方法体,继承了抽象类的子类,必须实现父类的所有的抽象方法。
3.抽象类可以被实例化,但不能通过普通的实例化new,它只能通过父类的应用指向子类的实例来间接的实例化子类。如:

Person t = new Teacher();

二、接口

接口是引用类型的,类似于类,接口内包含的全部是未实现的方法,而且接口类和方法的关键词不需要再声明abstract。和抽象类的相似之处有三点:
1.不能实例化;
2.包含未实现的方法声明;
3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。
除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。

三、抽象类和接口的相同点和不同点

不同点:接口不包含方法的实现,抽象类可以包含,也可以不包含,不包含时非抽象方法时{}必须保留。
接口可以多继承,类只能单继承。
类定义可在不同的源文件之间进行拆分。
相同点:都不能进行实例化,必须通过继承实现其抽象方法。
接口、类和结构都可以从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引器、方法和属性。

四、代码案例

抽象类:

namespace ClassDemo1
{

    #region 类
    public abstract class Person
    {
        //函数即使对象的动作
        public void Breath()
        {
            //空方法体
        }
        public void Name()
        {
            Console.WriteLine("人人都有姓名!");
        }
        public virtual void Drink() // 注意virtual,表明这是一个虚拟函数
        {
            Console.WriteLine("人是要喝水的!");
        }
        public void Eat()
        {
            Console.WriteLine("人是要吃饭的!");
        }
        public void Sleep()
        {
            Console.WriteLine("人是要睡觉的!");
        }
    }
    public  class Teacher :Person
    {
        //重定义父类方法
        public new  void Eat()
        {
            Console.WriteLine("教师是人,也是要吃饭的!");
        }
        //重写父类方法
        public override void Drink()
        {
            Console.WriteLine("教师是人,也是要喝水的!");
        }
        //自己独有方法(动作)
        public void Teach()
        {
            Console.WriteLine("教师的义务是要进行教授课程!");
        }
    }
    #endregion
    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Teacher t = new Teacher();
            t.Breath();
            t.Name();
            t.Drink();
            t.Eat();
            t.Sleep();
            t.Teach();
            Console.ReadKey();
        }
    }
}

接口:

namespace InterfaceDemo1
{
    #region 接口
    //不能进行实例化,只能通过继承实现其抽象方法
    //还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。
    //除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。

    //定义学生接口
    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#");
        }

        //自己定义的方法
        public void play_game()
        {
            Console.WriteLine("计算机类的学生除学好基础课外和学C#外,还喜欢打游戏");
        }

    }

    #endregion

    //测试
    class Program
    {
        static void Main(string[] args)
        {
            //派生与接口的学生类
            Infostudent infostudent = new Infostudent();
            infostudent.study_base();
            infostudent.work();
            infostudent.study_computer();
            //学生自己独有的方法
            infostudent.play_game();

            Console.ReadKey();
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#中抽象类与接口的区别详解

    1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象编程体系中的思想精髓之一. 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承).它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2

  • C#抽象类和接口的区别分析

    很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别: 一.抽象类: 含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖. 二.接口: 接口是

  • C#中类与接口的区别个人总结

    一.类与接口的区别 类:描述了一个实体,包括实体的状态,也包括实体可能发出的动作. 接口:定义了一个实体可能发出的动作.但是只是定义了这些动作的原型,没有实现,也没有任何状态信息. 1.接口与类区别: (1)接口有点象一个规范.一个协议,是一个抽象的概念: (2)而类则是实现了这个协议,满足了这个规范的具体实体,是一个具体的概念. (3)从程序角度,简单理解,接口就是函数声明,类就是函数实现.需要注意的是同一个声明可能有很多种实现. 2.接口与抽象类的区别: (1)A class can imp

  • 基于c# 类、接口、结构的联系与区别详解

    一.C#类与结构的差别1. 值类型与引用类型结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型类是引用类型:引用类型在堆上分配地址堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象.所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋

  • C#中类与接口的区别讲解

    一.抽象类 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们. 注意: 1.抽象方法,必须存在于抽象类当中.相反,抽象类中不一定全部是抽象方法.2.抽象方法没有方法体,继承了抽象类的子类,必须实现父类的所有的抽象方法.3.抽象类可以被实例化,但不能通过普通的实例

  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    目录 什么是接口? 接口的语法: (JDK7.0) 接口的语法: (JDK8.0) 接口的语法: (JDK9.0)—(私有方法) 接口的分类 常量接口: 空接口: 函数式接口: 什么是接口? 说到接口,USB大家肯定不陌生~接口是一种标准.规范.注意:接口一旦制定好,使用者和实现者都必须遵循的标准. 接口的语法: (JDK7.0) (1) 关键字:interface (2) 语法:  interface 接口名{} (3) 接口编译之后会生成对应的 .class文件 (4) 接口不能创建对象,但

  • C语言中.c和.h文件区别讲解

    C语言中.h和.c文件解析   简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 预处理阶段 词法与语法分析阶段 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为

  • Java中抽象类和接口的区别_动力节点Java学院整理

    接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类. 抽象类 1 如果将一个类

  • PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型) <?php abstract class Father { funct

  • java 抽象类与接口的区别介绍

    抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修饰符:public abstract 成员变量的修饰符:public static final 语法层面 抽象类中可以包含成员方法的实现细节,而接口中只能存在抽象方法-public abstract 抽象类中的成员变量可以是各种类型,接口中的成员变量只能是public static final 抽象

  • java 抽象类与接口的区别总结

    java 抽象类与接口的区别总结 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface 选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的 理解

  • 使用HttpClient调用接口的实例讲解

    一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body; get/set- } 二,封装HttpClient package cn.xxxxxx.httpclient; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.Name

随机推荐