抽象类中可以有构造函数(无参构造函数和有参构造函数)
无参构造函数在子类实例化时被调用
有参构造函数必须显示调用

抽象类中可以有抽象方法 但是不能有方法体,子类必须实现抽象方法
子类必须重写抽象类中的抽象方法,不能用new

抽象类中可以有虚方法,虚方法必须有方法体
子类继承抽象类,可以重写(override)和覆盖(new)抽象类中的虚方法也可以什么都不做。
但二者(override、new)不能同时做,只能选其一

注:new是隐藏基类方法,override重写了基类的方法,即便转为基类对象调用的也是派生类的重写方法

    public abstract class C
{
public string strAbs;
protected C()
{
Console.WriteLine("abstract class C");
} // 子类显示调用才会执行有参构造函数
protected C(string str)
{
strAbs = str;
} public void Method1()
{
Console.WriteLine("abstract class:method");
} //public void Method2();错误的写法 抽象类中的方法必须有方法体
public void Method2()
{
//有方法体,可以没有具体实现
}
//抽象类中可以有抽象方法,但是抽象方法不能有方法体,也就是没有实现部分
public abstract void Mehod3(); // public virtual void Method4();错误的写法:抽象类中的虚方法必须有方法体
public virtual void Method4()
{
Console.WriteLine("abstract class virtual method");
}
} public abstract class E:C
{
/// <summary>
/// 子类实例化时会先走父类无参构造函数
/// </summary>
protected E()
{
Console.WriteLine("abstract class E");
} /// <summary>
/// 子类显示调用才会执行有参构造函数
/// </summary>
/// <param name="str"></param>
protected E(string str)
{
this.strAbs = str;
} //子类继承抽象类,必须重写抽象类中的抽象方法
public override void Mehod3()
{ } //子类继承抽象类,对于抽象类的虚方法,要么用重写(override)要么用new覆盖,二者只能选其一
public override void Method4()
{
Console.WriteLine("E:C override method");
}
//public new void Method4()
//{
// Console.WriteLine("E:C new method");
//}
} public class F:E
{
//显示调用父类有参构造函数
public F(string str):base(str)
{
strAbs = str;
}
}

实例代码

接口中的方法不能有方法体,不能有抽象方法
接口是一组行为规范和规则
子类实现接口,必须实现接口中的所有方法
所以定义接口时,接口中的规则尽量单一,做到一个接口只有"一类"规则
这也说明接口是高度抽象的,高度概括,真正做到求同"除异"的

抽象类的作用
抽象类主要用于代码的复用
接口的用法
接口的使用主要体现了面向对象的多态

C#拾遗-接口与抽象类的更多相关文章

  1. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

  2. 从接口、抽象类到工厂模式再到JVM来总结一些问题

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...

  3. (转)深入理解Java的接口和抽象类

    原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...

  4. c++ 接口和抽象类

    其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...

  5. android中接口和抽象类的区别

    最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...

  6. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. c#接口与抽象类的区别

    abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...

  8. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

  9. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

随机推荐

  1. mysql查询语句select-子查询

    1 子查询定义 在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select).子查询的结果传递 ...

  2. [Linux]系统调用理解(3)

    本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法. 1.7 背景 在前面的文章 ...

  3. With great power comes great responsibility

    We trust you have received the usual lecture from the local SystemAdministrator. It usually boils do ...

  4. SQL创建字段信息(表值函数)

    ALTER FUNCTION [dbo].[fnt_SplitString] ( @p1 varchar(Max), ) ) RETURNS @Table_Var TABLE ( c1 varchar ...

  5. linux编程问题记录

    1.程序中需要用到字符串的时候,尽可能选择string类型,这种类型的字符串有很多比较容易的功能,如字符串之间可以直接拷贝赋值 string a; string b="123"; ...

  6. string与wstring之间的转换

    #include <string>std::string ws2s(const std::wstring& ws){    std::string curLocale = setl ...

  7. 编辑 Ext 表格(二)——— 编辑表格元素

    一.编辑单元格 Ext 中通过配置表格的属性 plugins 来设置表格是否可编辑, 表格的配置具体如下: var gridTable = Ext.create('Ext.grid.Panel', { ...

  8. new 等于 malloc加构造函数

    1.new 是c++中的操作符,malloc是c 中的一个函数 2.new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员 ...

  9. iOS--UIScrollView图片动画切换【实现每次只加载3张图片,进而减少占用内存,可循环滚动】

    #import "ViewController.h" #define IMAGENUMBER 5 #define SIZE self.view.bounds.size @inter ...

  10. MSMQ

    1.安装MSMQ 2.添加私有的队列 3.MSMQ可以发送的类型可以是任意类型,包括类 static string strServer = @"FormatName:Direct=TCP:1 ...