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.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...
随机推荐
- DataTable根据字段去重
DataTable根据字段去重 最近需要对datatable根据字段去重,在网上搜了很多,找到了一个方法,代码如下 public static DataTable DistinctSomeColumn ...
- js:实现自定义事件对象接口
网易2017内推笔试题 要求: 请实现下面的自定义事件Event对象的接口,功能见注释(测试1) 该Event对象的接口需要能被其他对象拓展复用(测试2) //测试1 Event.on('test', ...
- CRUSH map 定制实例解析
1.提取已有的CRUSH map ,使用-o参数,ceph将输出一个经过编译的CRUSH map 到您指定的文件ceph osd getcrushmap -o crushmap.txt 2.反编译你的 ...
- 926. Flip String to Monotone Increasing
A string of '0's and '1's is monotone increasing if it consists of some number of '0's (possibly 0), ...
- jzoj5888
tj:暴力連邊會tle 我們發現所有邊的邊權最大值不超過100000,這意味著可以設計和邊權有關的算法,假設現在邊權不相同 枚舉一個現在的邊權i,代表gcd為i,設連的2個點權值為a1∗ia1*ia1 ...
- 初识PHP之php运行流程及原理(一)
初识PHP一.用脚本命令行运行php(1)打开cmd.exe(winkey+R)(2)找到php.exe(拖进cmd即可)(3)输入命令php.exe -f "文件实际路径"注:运 ...
- python学习笔记04-格式化输出
使用占位符来进行格式化输出 %S %d %f Exit() 程序退出函数
- 【7】JMicro微服务-服务路由,负载均衡
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1.关于服务路由和负载均衡 服务路由:根据预先配置好的策略,为客户端选择一个当前可用的服务提供者,根据策略选择一个可用的 ...
- 【LeetCode】502. IPO
题目 假设 LeetCode 即将开始其 IPO.为了以更高的价格将股票卖给风险投资公司,LeetCode希望在 IPO 之前开展一些项目以增加其资本. 由于资源有限,它只能在 IPO 之前完成最多 ...
- Kali Linux 弱点分析工具全集
『弱点分析』与『信息收集』类工具的定位非常不同,其中包含大量的模糊测试工具.正确使用这些工具,将有助于我们发现可能存在的零日漏洞.同时此类工具中还包含了大量VoIP相关的渗透测试工具,这可能是安全人员 ...