惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
宝玉的分享
宝玉的分享
量子位
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
J
Java Code Geeks
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
S
SegmentFault 最新的问题
B
Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
小众软件
小众软件
The Cloudflare Blog
Y
Y Combinator Blog
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
IT之家
IT之家

博客园 - teacherzj

EF---延迟加载技术 Entity Framework 1 委托 xml 可扩展的标记语言 单例模式 集合,对象初始化器 序列化与反序列化 进程与线程 winform基础 MD5加密 接口 重写ToString()方法 密封类 部分类 序列化和反序列化 值类型和引用类型 简单工厂模式 C#中的访问修饰符 FileStream、StreamReader和StreamWriter
多态
teacherzj · 2014-11-30 · via 博客园 - teacherzj

多态
概念:让一个对象能够表现出多种状态(类型)
实现多态的3种手段:1、虚方法2、抽象类3、接口
1、虚方法
步骤:1)首先把父类的方法标记为虚方法:使用关键字virtaul,这个函数可以被子类重新写一遍。子类函数前写override

2)抽象类
如果父类中的方法不知道如何去实现时可以把它写成抽象类,方法写成抽象方法,用关键字abstract,抽象方法不能有任何实现。
a抽象成员必须标记为abstract,并且不能有任何实现。
b抽象成员必须在抽象类中。
c抽象类不能被实例化
除非子类也是一个抽象类,则可以不重写
d抽象成员的访问修饰符不能是private
e在抽象类中可以包含实例成员。并且抽象类的实例成员可以不被子类实现。
f抽象类是有构造函数的。虽然不能被实例化。
g如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数,如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候也必须要传入返回值。
=====
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑父类定义成一个普通类,用虚方法来实现。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以交该类定义为抽象类。

//使用多态求矩形的面积和周长以及圆形的面积和周长。
Shape shape=new Circle(5);
shape.GetArea();
shape.GetPerimeter();
public abstract class Shape
{
public abstract double GetArea();
public abstract double GetPerimeter();
}
public calss Circle:shape
{
public Circle(double r)
{
this.R=r;
}
private double _r;
public double R
{
get{return _r;}
set{_r=value;}
}
public override double GetArea()
{
return Math.PI*this.R*this.R;
}
public override double GetPerimeter()
{
return 2*Math.PI*this.R;
}
}