首先,要判断是否使用抽象类,可以从下面两个方面进行判断:

1、是不是需要被实例化

2、父类中有没有默认的实现

如果不需要被实例化,父类中没有默认的实现,则用抽象类(否则用虚方法来实现)

下面举个简单的例子:

namespace 抽象类实现多态案例
{
class Program
{
static void Main(string[] args)
{
//Student s = new Student();
Person p = new Student();
p.SayHi();
p.Standup();
}
//尽量用抽象来传输,不要用具体
//static void M1(Person p)
//{
// p.Standup();
//}
//static Person M2()
//{ //}
}
abstract class Person
{
public abstract void SayHi();
public abstract void Standup();
}
class Student : Person
{
public override void SayHi()
{
throw new NotImplementedException();
}
public override void Standup()
{
throw new NotImplementedException();
}
}
class Teacher : Person
{
public override void SayHi()
{
throw new NotImplementedException();
}
public override void Standup()
{
throw new NotImplementedException();
}
}
}

抽象类的另一个练习

namespace 抽象练习
{
class Program1
{
static void Main(string[] args)
{
Duck duck = new RubberDuck();
duck.Swim();
duck.Bark();
Console.ReadKey();
}
}
public abstract class Duck
{
public void Swim()
{
Console.WriteLine("鸭子水上漂。。。");
}
public abstract void Bark();
}
public class RubberDuck: Duck
{
public override void Bark()
{
Console.WriteLine("橡皮鸭的叫声。。。");
}
}
public class RealDuck : Duck
{
public override void Bark()
{
Console.WriteLine("真鸭的叫声。。。");
}
}
}

c#基础学习(0806)之抽象类实现多态的更多相关文章

  1. Java基础学习总结(5)——多态

    一.面向对象最核心的机制--动态绑定,也叫多态 1.1.通过下面的例子理解动态绑定,即多态 package javastudy.summary; class Animal { /** * 声明一个私有 ...

  2. Java基础之接口与抽象类及多态、内部类

    final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...

  3. c#基础学习(0806)之接口学习

    首先了解一下什么是接口: 1.接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码 2.定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”) 接口存在的意义 ...

  4. c#基础学习(0806)之StringBuilder的使用

    以前字符串的拼接基本都是用string来完成的,从来没有考虑过性能或者速度的问题,自从学习了StringBuilder之后才发现两者的差距有多大,当然,数据量比较小的时候,用string还是挺方便的, ...

  5. Java基础学习笔记(三) - 抽象类和接口

    一.抽象类 没有方法主体的方法称为抽象方法,包含抽象方法的类就是抽象类. Java中使用 abstract 关键字修饰方法和类,抽象方法只有一个方法名,没有方法体. public abstract c ...

  6. c#基础学习(0806)之可变参数、ref和out关键字的简单使用

    params可变参数: 1.无论方法有几个参数,可变参数必须出现再参数列表的最后,可以为可变参数直接传递一个对应类型的数组: 2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则数组为一个长度 ...

  7. [转帖]java基础学习总结——多态(动态绑定)

    https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态

  8. java基础学习笔记五(抽象类)

    java基础学习总结——抽象类 抽象类介绍

  9. c#基础学习(0709)之vs通过抽象方法实现多态

    抽象类不能用来实例化对象 1.抽象类中可以有实例成员,也可以有抽象成员 2.抽象成员不能有任何实现 3.抽象类.抽象成员必须包含在抽象类中 4.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...

随机推荐

  1. Android------------UI的控件学习内容

    1. android:gravity="fill_horizontal"  :  文本在显示框中内容显示的位置 2.ToggleButton :  切换按钮 3.RadioGrou ...

  2. docker 网络实践

    #docker 网络模式 环境 centos7. , Docker version -ce docker自带网络类型 bridge,host,none,container,overlay,macvla ...

  3. Git 使用流程

    # 下载远程仓库到本地 git clone 仓库地址cd 本地仓库文件夹 # 创建本地开发分支并与远程开发分支关联 git checkout -b develop origin/developgit ...

  4. Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】

    写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...

  5. docker微服务部署之:七、Rancher进行微服务扩容和缩容

    docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...

  6. vue微信分享链接添加动态参数

    微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...

  7. Install MySql on CentOS

    Installing & Configuring MySQL Server This Howto will show you how to install MySQL 5.x, start t ...

  8. mysql互为主从实战设置详解及自动化备份(Centos7.2)

    mysql互为主从实战设置详解(Centos7.2) 第一步:mysql配置  my.cnf配置 服务器1 (10.89.10.90) [mysqld]  server-id=1  log-bin=/ ...

  9. 【Java】认识 JDK,JRE,JVM

    JDK,JRE,JVM 今天我们讨论下这三个Java工具 JDK 全称Java Development ToolKit(Java 开发工具包). JDK是整个JAVA的核心,其包括了Java运行环境( ...

  10. java数据结构之二叉树的定义和递归实现

    定义最多有两棵子树的有序树,称为二叉树.二叉树是一种特殊的树.递归定义:二叉树是n(n>=0)个有限结点构成的集合.N=0称为空二叉树:n>0的二叉树由一个根结点和两互不相交的,分别称为左 ...