C#抽象类应用实例
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#抽象类应用实例的更多相关文章
- C#简单工厂和抽象类的实例
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
- PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程
PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...
- c++ 接口和抽象类
其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
- C#抽象类
抽象类使用abstract修饰符声明: 不能创建抽象类的实例: 抽象类只能用作其他类的基类: 抽象类中可以包含抽象成员和普通的非抽象成员: 抽象类自己可以派生自另外一个抽象类: 任何派生自抽象类的[类 ...
- 谈谈Delphi中的类和对象3---抽象类和它的实例
四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...
- Delphi中的接口和抽象类
参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643 接口:Interface Delphi中接口中的关键字Interface,但 ...
- 20141014C#面向对象抽象方法,抽象类,接口
里氏代换原则.可以用子类的对象替代父类的对象. 抽象依赖原则.依赖——形参,关联 一.抽象方法: 在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类必须具备此方法,因此把这样的方法定 ...
随机推荐
- iOS-获取通讯录联系人信息
头文件 #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 授权 关于通讯录 ...
- win7 重装 docker 启动后无法启动错误解决
描述 win7 重新安装Docker 后启动 Docker Quickstart Terminal 出现如下错误 Starting "default"... (default) ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- 高斯消元 & 线性基【学习笔记】
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...
- 夏令营讲课内容整理 Day 6 Part 3.
第三部分主要讲的是倍增思想及其应用. 在Day3的整理中,我简要提到了倍增思想,我们来回顾一下. 倍增是根据已经得到的信息,将考虑的范围扩大一倍,从而加速操作的一种思想,它在变化规则相同的情况下,加速 ...
- js作用域的相关知识
众所周知,在ES6之前,JavaScript是没有块级作用域的,如下图所示: 学过其他语言的同学肯定有点诧异,为什么会这样呢?因为js还是不同于其他语言的,在ES5中,只有全局作用域和函数作用域,并没 ...
- 模板方法模式和JDBCTemplate(一)
本篇博客的目录: 一:模板方法模式介绍 二:模板方法模式的简单实现 三:总结 一:模板方法模式的介绍 1.1:模板方法模式的定义 定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中.Templat ...
- php get_called_class()函数与get_class()函数的区别
get_class (): 获取当前调用方法的类名: get_called_class():获取静态绑定后的类名: class Foo{ public function test(){ var_dum ...
- nginx上支持.htaccess伪静态的配置实例
本文介绍下,在nginx上配置.htaccess伪静态的方法,有需要的朋友参考下吧. 在apache上.htaccess转向,只要apache编译的时候指明支持rewrite模块即可. 但是换到ngi ...
- [JSOI2008]最大数maxnumber
[JSOI2008]最大数maxnumber 标签: 线段树 单独队列 题目链接 题解 线段树裸题. 如果一直RE可能是你用的cin/cout. Code #include<cstdio> ...