类与接口的区别和详解

在C#中类和接口是非常重要的知识点。这里主要介绍这两种的类型。

1. 类

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

1.1 抽象类

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

代码示例:

static void Main(string[] args)
{
    Person person = new Person();
    person.ShowHello();
    Console.ReadKey();
}
//抽象类
public abstract class Humen
{
    public Humen() { Console.WriteLine("Abstract Class .ctor"); }

    public abstract void ShowHello();
}
public class Person : Humen
{
    public override void ShowHello()
    {
    Console.WriteLine("Hello");
    }
}

实现结果:

1.2 密封类

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

1.3 静态类

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

2. 接口

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

什么时候把方法放到父类中 还是接口里:

当一个父类派生出5个子类时,所有子类中只有3个需要一个功能,也就是说不是所有的子类都需要此功能,那么就可以把次功能放到一个接口里,各子类进行单独的实现。接口为了更好的约束子类。
时间: 2024-10-10 05:58:31

类与接口的区别和详解的相关文章

Java、javax、org、sun、Java.util等常用包的区别、详解、实例

Java.javax.org.sun包都是jdk提供的类包,且都是在rt.jar中.rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就在根classloader的加载路径里面,所以放在classpath是多此一举 .他们之间的区别具体如下: 1. java.* JavaSE的标准库,是java标准的一部分,是对外承诺的java开发接口,通常要保持向后兼容,一般不会轻易修改.包括其他厂家(IBMJDK/HPJDK/OpenJDK)在

Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)

Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j) 博客分类: Java综合 第一.Logger.getLogger()和LogFactory.getLog()的区别     1.Logger.getLogger()是使用log4j的方式记录日志:  2.LogFactory.getLog()则来自apache的common-logging包. common-logging组件:         Jakarta Commons

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享

原创不易,转载请注明出处:超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 代码下载地址:http://www.zuidaima.com/share/1759689106541568.htm 依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器--Guice! 废话不多讲了,先看看Guice是如何实现

java中4种修饰符访问权限的区别及详解全过程

java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为public.protect.default.private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高. 下面详细讲述下它们的访问权限问题.(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况.) 首先在这里把它们的访问权限表示出来:

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

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

OpenCV学习C++接口 Mat像素遍历详解

OpenCV学习C++接口 Mat像素遍历详解 原文地址:https://www.cnblogs.com/zhehan54/p/8460602.html

并发编程(六)Object类中线程相关的方法详解

一.notify() 作用:唤醒一个正在等待该线程的锁的线程 PS : 唤醒的线程不会立即执行,它会与其他线程一起,争夺资源 /** * Object类的notify()和notifyAll()方法详解 */ public class MyNotify { // 在多线程间共享的对象上使用wait private String[] shareObj = {"true"}; public static void main(String[] args) { MyNotify test =

Jmeter接口之响应断言详解

响应断言 : 对服务器的响应进行断言校验 Apply to 应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选"main sample only" 就足够了,因为我们一个请求,实质上只有一个请求.但是当我们发一个请求时,可以触发多个服务器请求,类似于ajax那种,那么就有main sample 和 sub-sample之分了.此外,对于

java中四种访问修饰符区别及详解全过程

客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类. 类创建者:即创建新数据类型的程序员,目标是构建类. 访问控制存在的原因:a.让客户端程序员无法触及他们不应该触及的部分  : b.允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员  java的四个关键字:public.protected.default.private(他们决定了紧跟其后被定义的东西可以被谁使用) 适用范围<访问权限范围越小,安全性越高>   访问权限   类