C# 之 抽象类与接口

抽象类


C#同意把类和方法声明为abstract,即抽象类和抽象方法。抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的对象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是详细类,而树枝节点均应当是抽象类。抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。

注意:1.抽象类不能实例化;2.抽象方法是必须被子类重写的方法;3.假设类中包括抽象方法,那么类就必须定义为抽象类,不论是否还包括其它一般方法。

接口

    接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就能够支持接口所指定的全部属性和成员。声明接口在语法上与声明抽象类全然同样,但不同意提供接口中不论什么成员的运行方式。所以接口不能实例化,不能有构造方法和字段;不能有修饰符,比方public、private等;不能声明虚拟的或静态的等。还有实现接口的类就必需要实现接口中的全部方法和属性。

    接口用interface声明,而不是class,接口名称前要加‘I‘,接口中的方法或属性前面不能有修饰符、方法没有方法体。

抽象类与接口的差别:

   类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。

假设行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类

从设计角度讲,抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法怎样实现还不确认,预先定义。

    抽象类和接口都包括能够由派生类继承的成员。接口和抽象类都不能直接实例化,但能够声明这些类型的变量。假设这样做,就能够使用多态性把继承这两种类型的对象指定给他们的变量。接着通过这些变量来使用这些类型的成员,但不能直接訪问派生对象的其它成员。

派生类仅仅能继承一个基类,即仅仅能够直接继承一个抽象类(可是能够用一个继承链包括多个抽象类)。相反,类能够使用随意多个接口,但这不会产生太大的差别——这两种情况取得的效果是类似的,仅仅是採用接口的方式略有不同。

抽象类能够拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)用非抽象成员(它们拥有代码体,也能够是虚拟的,这样就能够在派生类中重写)。还有一方面,接口成员必须都在使用接口的类上实现——它们没有代码体。另外,依照定义,接口成员是公共的(由于它们倾向于在外部使用),但抽象类的成员能够是私有的(仅仅要它们不是抽象的)、受保护的、内部的或受保护的内部成员(当中受保护的内部成员仅仅能在应用程序的代码或派生类中訪问)。此外,接口不能包括字段、构造函数、析构函数、静态成员或常量。

抽象类主要用作对象系列的基类,共享某些主要特性,比如,共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍能够完毕某些同样的任务。

抽象类能够给出一些成员的实现,接口却不包括成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员须要实现类全然实现,一个类智能继承一个抽象类,但可实现多个接口等等。

C# 之 抽象类与接口

时间: 2024-07-31 14:33:42

C# 之 抽象类与接口的相关文章

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

抽象类和接口的区别

含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的.abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法.如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型. 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletC

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

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

Java重载、覆写、this、super、抽象类、接口

第一.重载和覆写 1) 重载:方法名相同,参数类型和个数不同,典型的是构造方法的重载  覆写:方法名.参数类型.返回值类型全部相同,典型的是接口的实现: 2)重载对权限没有要求:覆写要求  被覆写的方法不能拥有更严格的权限: 3)重载发生再一个类中:覆写发生在继承类中. 第二.this和super 1)this访问本类中的属性(方法),如果本类中没有此属性(方法),则从父类中 继续寻找:super询问父类中的属性(方法): 2)调用本类构造,必须放在构造方法的首行:调用父类构造,必须放在子类构造

关于抽象类和接口

抽象类:含有abstract修饰符的类即为抽象类,它是不能创建实例对象的,含有abstract的方法必须定义在抽象类中,但抽象类中的方法不一定必须是抽象的,抽象类中的抽象方法再其子类中必须被实现,所以不能有抽象的静态方法(静态方法是不能被继承的). 接口:是一个特殊的抽象类,接口中定义的方法都必须是抽象的,接口中的方法都是public abstract类型,接口中的成员变量默认为public abstract final类型. 语法区别:① 抽象类中可以拥有普通的成员变量,接口中没有. ②抽象类

抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

关于抽象类和接口一些简单的概念

做一下笔记: 1.抽象类可以有构造方法,接口中不能有构造方法.  2.抽象类中可以有普通成员变量,接口中没有普通成员变量  3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法.  4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然  eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型.  5. 抽象类中可以包含静态方法,接口中不能包含静

三、抽象类和接口的对比-----《大话设计模式》

一.抽象类 c#允许把类和方法声明为abstract,即抽象类和抽象方法.抽象类不能实例化,抽象方法必须被子类重写,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法. 抽象类拥有尽可能多的共同代码,尽可能少的数据. abstract class Animal //加abstract关键字,表明是抽象类 { -- protected abstract string getShoutSound(); //在方法返回值前加abstract表明此方法是抽象方法. -- //抽象

oop_day06_抽象类、接口_20150814

oop_day06_抽象类.接口_20150814 1.static final常量: 1)必须声明同时初始化,不能修改,类名点来访问 2)常量名建议所有字母都大写 3)编译器编译时会直接替换为具体的值---效率高 代码示例: package oo.day06; //static final常量 public class StaticFinalDemo { public static void main(String[] args) { //Aoo.NUM = 250; //编译错误,常量不能修