c#基础学习(0806)之抽象类实现多态
首先,要判断是否使用抽象类,可以从下面两个方面进行判断:
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)之抽象类实现多态的更多相关文章
- Java基础学习总结(5)——多态
一.面向对象最核心的机制--动态绑定,也叫多态 1.1.通过下面的例子理解动态绑定,即多态 package javastudy.summary; class Animal { /** * 声明一个私有 ...
- Java基础之接口与抽象类及多态、内部类
final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...
- c#基础学习(0806)之接口学习
首先了解一下什么是接口: 1.接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码 2.定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”) 接口存在的意义 ...
- c#基础学习(0806)之StringBuilder的使用
以前字符串的拼接基本都是用string来完成的,从来没有考虑过性能或者速度的问题,自从学习了StringBuilder之后才发现两者的差距有多大,当然,数据量比较小的时候,用string还是挺方便的, ...
- Java基础学习笔记(三) - 抽象类和接口
一.抽象类 没有方法主体的方法称为抽象方法,包含抽象方法的类就是抽象类. Java中使用 abstract 关键字修饰方法和类,抽象方法只有一个方法名,没有方法体. public abstract c ...
- c#基础学习(0806)之可变参数、ref和out关键字的简单使用
params可变参数: 1.无论方法有几个参数,可变参数必须出现再参数列表的最后,可以为可变参数直接传递一个对应类型的数组: 2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则数组为一个长度 ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- c#基础学习(0709)之vs通过抽象方法实现多态
抽象类不能用来实例化对象 1.抽象类中可以有实例成员,也可以有抽象成员 2.抽象成员不能有任何实现 3.抽象类.抽象成员必须包含在抽象类中 4.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...
随机推荐
- sql 中如何查询某一列的数据在另一个表中有没有?
假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)
- Hibernate一级缓存测试分析
Hibernate 一级缓存测试分析 Hibernate的一级缓存就是指Session缓存,此Session非http的session会话技术,可以理解为JDBC的Connection,连接会话,Se ...
- Android-------------fragment的学习
一.fragment的静态使用 1.使用步骤: a.继承fragment 重写onCreatevVew()的回调方法 b.设置Fragment的布局 c.在Activity中声明Fragme ...
- C++的访问关系
1.C++的访问关系
- Flask的WTforms
一.简单介绍 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 类似于Django中的modelform 安装: pip3 install wtforms 二.简 ...
- Chrome谷歌浏览器已停用不支持的扩展程序解决方法
在不能上外网的情况下解决该问题: http://www.liu16.com/post/Chrome_2447.html
- HTML 5 使用 FileReader、FormData实现文件上传
一.FileReader FileReader 对象允许Web应用程序异步读取存储在用户计算机中的文件(或缓冲区的原始数据),使用File或Blob对象指定要读取的文件或数据. 1.1 实例化 var ...
- Fiddler工具详细介绍
百度看到Fiddler工具的详细介绍,转载收藏,侵权删,原文地址:http://blog.csdn.net/qq_21445563/article/details/51017605 前部分讲解Fidd ...
- 【PaddlePaddle系列】报错解决方法合集 (不定时更新)
1.PaddlePaddle使用CPU时正常运行,但是使用GPU时却报出一堆错误信息,节选如下: paddle.fluid.core.EnforceNotMet: enforce allocating ...
- Window Screen对象
window.screen 对象包含有关用户屏幕的信息. window.screen对象在编写时可以不使用 window 这个前缀.一些属性: screen.availWidth // 可用的屏幕宽度 ...