abstract修饰符可以和类、方法、属性、索引器及事件一起使用,在类声明中使用abstract修饰符以表明这个类只能是其他类的基类。

抽象类的特性

(1)抽象类不能被实例化

(2)抽象类可以包含抽象方法和抽象访问器

(3)不能用sealed修饰符修改抽象类,因为抽象类本身就是用来给其他类继承的

(4)抽象类的非抽象子类必须实现其继承的所有抽象方法和抽象访问器

抽象方法

(1)抽象方法是隐式的虚方法

(2)抽象方法只允许声明在抽象类中

(3)抽象方法不能提供实际的实现,所以没有方法体;抽象方法的实现是在非抽象的派生类中以override重写实现的

(4)抽象方法声明中不可以使用static或者virtual修饰符

(5)abstract关键字不能修饰静态方法或静态属性

抽象类的构造函数

(1)不要再抽象类中定义public或protected internal访问权限的构造函数

(2)应在抽象类中定义protected或private访问权限的构造函数

(3)如果在抽象类中定义一个protected构造函数,则在实例化派生类时,基类可以执行初始化任务

抽象方法和虚方法的区别

虚方法有实现部分,并且派生类对其重写是可选的;抽象方法没有实现部分,并且强制非抽象派生类对其重写

重写虚方法例子中的代码,改为抽象的方式实现

using System;
using System.Collections;

//抽象类
public abstract class Animal
{
    protected string face;
    //声明为protected的构造函数,在实例化派生类时,基类可以执行初始化工作
    protected Animal() { this.face = "^_^"; /*抽象类构造函数初始化的例子*/}
    public abstract void eat();
    public abstract string Face
    {
        get;
    }
}

public class dog : Animal
{
    //重写基类中的抽象访问器Face
    public override string Face
    {
        get
        {
            return face;
        }
    }
    //重写基类中的抽象方法eat
    public override void eat()
    {
        Console.WriteLine("狗吃骨头 " + Face);
    }
}

public class cat : Animal
{
    public override string Face
    {
        get
        {
            return face;
        }
    }

    public override void eat()
    {
        Console.WriteLine("猫吃鱼 " + Face);
    }
}

public class panda : Animal
{
    public override string Face
    {
        get
        {
            return face;
        }
    }

    public override void eat()
    {
        Console.WriteLine("熊猫吃竹子 " + Face);
    }
}

public class MainFun
{
    static void Main()
    {
        Animal[] anim = ];
        anim[] = new dog();
        anim[] = new cat();
        anim[] = new panda();
        anim[].eat();
        anim[].eat();
        anim[].eat();
        Console.ReadKey();
    }
}

C#抽象类应用实例的更多相关文章

  1. C#简单工厂和抽象类的实例

    using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...

  2. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  3. c++ 接口和抽象类

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

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

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

  5. 0026 Java学习笔记-面向对象-抽象类、接口

    抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...

  6. C#抽象类

    抽象类使用abstract修饰符声明: 不能创建抽象类的实例: 抽象类只能用作其他类的基类: 抽象类中可以包含抽象成员和普通的非抽象成员: 抽象类自己可以派生自另外一个抽象类: 任何派生自抽象类的[类 ...

  7. 谈谈Delphi中的类和对象3---抽象类和它的实例

    四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...

  8. Delphi中的接口和抽象类

    参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643 接口:Interface Delphi中接口中的关键字Interface,但 ...

  9. 20141014C#面向对象抽象方法,抽象类,接口

    里氏代换原则.可以用子类的对象替代父类的对象. 抽象依赖原则.依赖——形参,关联 一.抽象方法: 在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类必须具备此方法,因此把这样的方法定 ...

随机推荐

  1. 基于flash的web视频对讲直播测试

    由于项目的需求,要在web上实现视频通话的需求.现成的方案有WebRTC,基于浏览器的成熟方案,但是这个方案和公司项目需求有几个点冲突.后来考虑到基于flash的方案.参考雷神的博客 simplest ...

  2. Springboot security cas源码陶冶-FilterSecurityInterceptor

    前言:用户登录信息校验成功后,都会获得当前用户所拥有的全部权限,所以对访问的路径当前用户有无权限则需要拦截验证一发 Spring security过滤器的执行顺序 首先我们需要验证为啥FilterSe ...

  3. WebStorm11

    1.下载补丁 1.下载地址:http://pan.baidu.com/s/1gdnrdWv 2.拷贝下载的文件 JetbrainsCrack.jar 到 /bin目录下(是指你的软件安装根目录) 2. ...

  4. restful framework 认证源码流程

    一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...

  5. redis requires ruby version 2.2.2的解决方案

    在执行gem install redis时 提示: gem install redis ERROR: Error installing redis: redis requires Ruby versi ...

  6. SmokePing 部署实践

    1 通过 yum 安装依赖的库以及环境 yum install rrdtool wqy* fping curl bind-utils httpd httpd-devel \ perl perl-FCG ...

  7. 哪些CSS是可以被继承的--简单整理

    那些CSS是可以被继承的--简单整理1.文本相关属性是继承的:font-size,font-family,line-height,text-index等2.列表相关属性是继承的:list-style- ...

  8. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  9. 新手最纠结的事。学什么语言最好?学什么语言有前途(or 钱途)?

    这篇文章是转载自王根的博客,源地址:http://www.yinwang.org/blog-cn/2017/07/06/master-pl ,虽然王根是一个备受争议的人,不过这篇文章写的很好,我对于编 ...

  10. linux 管理权限

    linux 管理权限 linux 文件 权限 1.使用 ls -l 命令 执行结果如下(/var/log) : drwxr-x--- 2 root adm 4096 2013-08-07 11:03 ...