类和接口的区别

类:

类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static)

抽象类(abstract)

关键字: abstract
使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类。 
特点:

    1.不能被实例化;ClassName en=new ClassName();//这样会报错。    2.抽象成员必须包含在抽象类中。    3.抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstract)。    4.子类继承抽象父类后,必须把父类中的所有抽象成员都重写(非抽象成员不必重写)。除非子类也是个抽象类。    5.抽象成员的访问修饰符不能是private。    6.抽象类是有构造函数,虽然不能被实例化。    7.abstract不能用于字段成员,可定义成属性。    8.abstract用于方法时,方法不能定义主体(内容)。    9.抽象类也可以实现接口,但要把接口的成员前面标记个abstract。

密封类(sealed)
关键字: sealed使用目的:不需要子类来继承他。如 String;特点:    1.不能被继承,如:string ,不能被继承。    2.子类重写后,前面加个sealed,那么子类就不能再被继承。

静态类(static)

关键字: static
使用目的:不需要实例化,可以直接类名引用静态方法。比如 工具类。
特点:
1.相似于sealed与abstract使用。
2.静态成员在整个程序退出时才释放资源,所以尽量别写静态字段、属性。最好是静态方法。

接口:

关键字: interface
使用目的:抽象类所拥有的共性,也可以概括为:为了多态。
特点:
1.接口中只能包含方法。(方法、属性、索引器、事件)
2.接口中的方法不能有任何实现
3.接口中的成员不能有任何访问修饰符(哪怕是public)
4.接口不能被实例化
5.实现接口的类,必须实现接口的所有成员(这里跟抽象类一样)
6.类不能多继承,所以在某些情况下,只能用接口来代替。接口可以多实现(一个类可以继承多个接口,而只能继承一个类)
7.接口的主要目的就是为了实现多态
8.当一个类,同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个(如果一个类同时继承了父类和接口的时候,要把父类写在最前面)
9.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口
10.当父类实现接口,子类继承父类。那么 接口就可以引用子类
11.不要在一个接口中写过多的方法,避免造成接口污染。可编写多个接口,在每个接口中,分别定义方法
12.实现接口方法的时候,不要有override关键字,直接跟平常定义一样
13.接口方法的显示实现,如果多个接口里有相同的方法名。那么第一个方法名默认的引用的是排在最前面的接口,如果要使用后面接口的方法,就要显示实现:接口名.方法名。访问修饰符是private

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20161025
{
    class Program
    {
        static void Main(string[] args)
        {
            IIBaseprogrom p = new IIBaseprogrom();
            //调用指定接口的方法
            IBaseProgrom1 p1 = p as IBaseProgrom1;
            Console.WriteLine(p1.helloword("hello"));
            //  p.helloword(1);
            //默认方法
            Console.WriteLine( p.helloword("hello"));

            pearson pearson = new pearson();
            //调用继承的抽象类的非抽象方法
            pearson.hello();
            //调用重写后的方法
            Console.WriteLine(pearson.hello("hello"));
            //调用静态类的方法
            stBaseprogrom.hello();
            Console.Read();
        }
    }

   /// <summary>
   /// 接口1
   /// </summary>
   public  interface IBaseProgrom
    {
        int helloword(int x);

        string helloword(string hello);
    }
    /// <summary>
    /// 接口2
    /// </summary>
    public interface IBaseProgrom1
    {
        string helloword(string x);
    }

    /// <summary>
    /// 类1
    /// </summary>
    public class BaseProgrom
    {
        string helloword(string x)
        {
            return "hello";
        }
    }
    /// <summary>
    /// 类2
    /// </summary>
    public class IIBaseprogrom : BaseProgrom,IBaseProgrom,IBaseProgrom1
    {
        public int helloword(int x)
        {
            return x;
        }
        int IBaseProgrom.helloword(int x)
        {
            return x;
        }

        //显性显示 调用指定的接口的方法
        string IBaseProgrom1.helloword(string x)
        {
            return "调用指定的接口IBaseProgrom1的方法";
        }
        //默认为最前面的接口方法
        public  string helloword(string s)
        {
            return "默认最前面的接口方法调用";
        }
    }

    /// <summary>
    /// 抽象类
    /// </summary>
    public abstract class abBaseprogrom
    {
        //非抽象成员
        public void hello()
        {
            Console.WriteLine("抽象类方法");
        }
        //抽象成员
        public abstract string hello(string str);
    }

    /// <summary>
    /// 密封类
    /// </summary>
    public sealed class pearson : abBaseprogrom
    {
        public override string hello(string str)
        {
            return "pearson 类重写方法";
        }
    }
    /// <summary>
    /// 静态类
    /// </summary>
    public static class stBaseprogrom
    {
        public static void hello()
        {
            Console.WriteLine("静态类方法调用");
        }
    }

}

具体代码如下

时间: 2024-10-18 11:58:37

类和接口的区别的相关文章

JAVA-抽象类和接口的区别总结

首先.抽象类和接口都很好的提供了一种将实现和接口分离的方法.. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗.猫来对它进

类 和 接口 的区别

虽然学java 已经学了好久,但是却未能真正搞清楚类 接口的区别,所以,特别百度了一下,再加上了自己的理解,写了这个博文,也是希望和我一样有疑问的人能够理清者之间的关系. 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化. 但接口是一个行为的规范,里面的所有东西都是抽象的! 一个类只可以继承一个基类也就

类与接口的区别和详解

在C#中类和接口是非常重要的知识点.这里主要介绍这两种的类型. 1. 类 类的分类有:抽象类(abstract).密封类(sealed).静态类(static) 1.1 抽象类 关键字: abstract使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类. 特点: 1.不能被实例化:ClassName en=new ClassName();//这样会报错. 2.抽象成员必须包含在抽象类中. 3.抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstrac

类,抽象基类,接口类三者间的区别与联系(C++)

联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html. 下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教. (1)结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) (2)概念上的区别: 普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类

多线程-----Thread类与Runnable接口的区别

第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMyThread的时候在创建三个对象的同时创建了三个线程:实现Runnable的, 相当于是拿出一个卖早餐10份的任务给三个人去共同完成,newMyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行. 一个类只能继承一个父类,存在局限:一个类可以实现多个接口.在

类、抽象类与接口的区别

类与类之间只能单继承 类与接口之间可以多实现: 接口与接口之间可以多继承: 声明 变量 方法 和接口的关系 和类的关系 是否能构造对象 类 使用class关键字声明,修饰符是 public 可以采用任何合法的方式进行声明 可以采用任何合法的方式进行声明 多实现 单继承 可以直接构造对象 抽象类 使用 abstract class关键字声明,修饰符是 public 可以采用任何合法的方式进行声明 如果抽象类中含有抽象方法,那么这个方法的声明必须是abstract.这个方法访问权限不能为privat

抽象类与接口的区别

抽象类的定义: 成员属性:可以是变量,也可以是常量 成员方法:可以抽象,也可以非抽象(比如:构造方法是一定会有的) 接口类的定义: 成员属性:只能是常量(public static final) 成员方法:只能是抽象(接口没有构造方法,像太监没有小JJ) 多态的区别: 类与类: 继承,单一继承(亲爹只有一个) 类与接口: 实现,单一.多重实现(可以认多个干爹) 接口与接口: 继承,单一.多重继承(可以认多个干爹) 设计理念区别: 抽象类被继承体现的是:"is a"的关系.抽象类中定义的

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

Java中的类和接口

类有两种: 普通类  : 抽象类(abstract): 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承(extends),才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法. 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口. 抽象方法 如果你想设计这样