虚方法2014年6月10日01:50:45

什么是方法重写?

方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。只有用virtual、abstract、override修饰的方法在继承后子类可以重写。

方法重写的意义:

为所有子类定义了某种规范(某种必须有的规范),多态。-----------这里的规范可以理解为”行为“,就是方法,等同于接口中提到的规范。其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束)

什么是虚方法?

使用virtual关键字修饰,写在返回值类型前面:public
virtual 或 virtual
public。虚方法必须在本类中有实现,哪怕是空的实现{}。例:person类中的虚方法毫无意义,中国人显示中国国籍,美国人显示美国国籍。

虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。子类不重写时,调用父类的虚方法,这也就是为什么父类虚方法必须有实现的原因。重写时用override关键字修饰。-----------方法重写时,方法签名必须与父类中的虚方法完全一致,否则重写不成功,其中包括“返回值”。

方法重写与方法重载:

一个函数由这么几部分组成,函数名、参数个数、参数类型、返回值,就是把函数名字去掉以后,剩下的东西(返回值、参数、调用方式等)就是函数的签名。函数在重载时,利用函数签名的签名参数列表不同(即参数个数与类型的不同)来区别调用者到底调用的是那个方法。构成重载的条件:签名参数列表不同(参数类型不同,顺序不同或者参数个数不同),与返回值无关。

重载是方法的名称相同。参数个数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。

方法重写时,方法签名必须与父类中的虚方法完全一致。方法重写(Override)是面向对象的概念。

什么是抽象类?

abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员。如果一个类中有任何抽象成员,那么这个类必须标记为抽象类abstract
class。.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类。抽象成员在抽象类中不能有任何实现。

练习1:形状类Shape(父类),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shape
sh=new Circle(5);sh.getArea()能计算出圆的面积。Shape sh=new
Square(5);sh.getArea()能计算出正方形的面积。


  1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 计算面积
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12
13 //Shape shape1 = new Circle(5);
14 //Console.WriteLine(shape1.getArea());
15
16 //Shape shape2 = new Square(10, 10);
17 //Console.WriteLine(shape2.getArea());
18
19 //计算面积.Circle
20
21 Circle c1 = new Circle(10);
22 Console.WriteLine(c1.ToString());
23
24 Console.ReadKey();
25 }
26 }
27
28 /// <summary>
29 /// 形状类
30 /// </summary>
31 abstract class Shape
32 {
33 private double _width;
34
35 /// <summary>
36 /// 宽
37 /// </summary>
38 public double Width
39 {
40 get { return _width; }
41 set { _width = value; }
42 }
43
44 private double _height;
45
46 /// <summary>
47 /// 高
48 /// </summary>
49 public double Height
50 {
51 get { return _height; }
52 set { _height = value; }
53 }
54
55
56 /// <summary>
57 /// 计算指定图形的面积,抽象方法
58 /// </summary>
59 /// <returns></returns>
60 public abstract double getArea();
61
62 }
63
64
65 /// <summary>
66 /// 圆类
67 /// </summary>
68 class Circle : Shape
69 {
70 public Circle(double r)//含参数的构造函数
71 {
72 this.Height = r;
73 this.Width = r;
74 }
75
76 /// <summary>
77 /// 计算圆的面积
78 /// </summary>
79 /// <returns></returns>
80 public override double getArea()//方法重写
81 {
82 return this.Width * this.Height * Math.PI;
83 }
84 public override string ToString()//
85 {
86 //return base.ToString();
87 return getArea().ToString();
88 }
89 }
90
91 class Square : Shape
92 {
93 public Square(double w, double h)//含参数的构造函数
94 {
95 this.Width = w;
96 this.Height = h;
97 }
98
99 /// <summary>
100 /// 计算正方形面积
101 /// </summary>
102 /// <returns></returns>
103 public override double getArea()
104 {
105 return this.Height * this.Width;
106 }
107 }
108 }

时间: 2024-10-17 07:53:08

虚方法2014年6月10日01:50:45的相关文章

2014年7月10日

字符串讲解  参考MSDN 方法 string.ToLower() string.ToUpper() string.Equals 属性: string.length 字符串分割: string str = "How are you ?Fine,Thank you?"; string[] words = str.Split('','?','!',','); 分割方法的重载 string str = "How are you ?Fine,Thank you?"; cha

数据库2014年6月10日11:13:10

SQL语句创建数据库: create table student(id int not null primary key,number nvarchar not null,name nvarchar not null,brithday DateTime default getdate(), adress nvarchar ) 创建一个学生表,主键为id,not null 表示不为空,default getdate()表示设定默认值为当前时间. 空值处理函数:select isnull (Name

2014年8月10日:敏捷个人奥森跑步+慢走分享

敏捷个人2014年第二次线下交流活动,雨过天晴的早上空气格外清新,特别适合跑步.早上7点我们在奥林匹克森林公园南门集合. 跑步前跟着 @李宏喜 做跑前拉伸活动,他是专业的马拉松运动员,10月份的北京马拉松比赛有好几个敏友报名,这也算是为北马比赛的准备. 7点半开始跑第一圈用时33分钟,喝点水继续慢跑第二圈. 跑过两圈下来已经是大汗淋漓. 第三圈开始慢走,边走边分享,四个人分享结束又走完了一圈. 以下是每个人的分享内容. @尹井鑫的分享 我是从今年5月开始敏捷个人练习的,大概用了1个多月的时间,完

2014年7月10日,我人生的最重要Upgrade

2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未来的模糊规划.在近11点,散伙回家,在酒精的刺激下,终于睡了个好觉. 在10号的六点半,起床,快速的洗漱后打车到国妇婴,要赶到早高峰之前到达,要知道,从浦东到浦西还是有很多红绿灯的,尽管只有15公里.到达了,陪着老婆做产前的各种检查.当确定了产后还是住六人间的小床后,觉得不可思议,怎么能让产妇和新生

2014年5月10日

时间是毫不留情的,一晃,半年的时间又将过去. 这不仅仅是焦虑,也有无从着手之感. 北京,郊区的出租屋,月薪5K,单身:其实,我过得不错.每天回家,第一件事就是打开电脑,打开chrome,打开央广网的中国之声直播,如果它在播广告,就换到经济之声.这是从大学当播音员以来一直的习惯,也是为了房间里有点声音. 从去年5月到这座我不太喜欢的城市,已经一年,我才想起写些什么东西.By the way,除了空气,并没有什么不满,北京给我机会,给我工作,上天待我很优厚了(笑). 前两年,浑浑噩噩的,毕业两年的时

接口2014年6月11日01:11:37

1 [1]C#中的接口和类有什么异同. 2 3 不同点: 4 不能直接实例化接口. 5 接口不包含方法的实现. 6 接口可以多继承,类只能单继承. 7 类定义可在不同的源文件之间进行拆分(partial). 8 9 相同点: 10 接口.类和结构都可以从多个接口继承. 11 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员. 12 接口和类都可以包含事件.索引器.方法和属性(属性本质上是两个方法). 13 14 基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段

数据库2014年6月10日08:17:28

平时谈到"数据库"可能有两种含义:MSSQLServer.Oracle等某种DBMS(软件):存放一堆数据表的一个分类Catalog(数据库文件). SQL----Structured Query Language,结构化查询语言.SQL != SQL server != MS SQL server(MicroSoft) 主键(PrimaryKey)---一个表中每个数据行的唯一标识,是唯一非空的.不会有重复值---不能为null---有且仅有一个(不涉及复合主键). 业务主键是使用有

学习苹果Swift语言的一些在线资源(2014年9月10日更新)

Swift是苹果为OS X和iOS平台引入的一种新的程序设计语言,这种程序设计语言已经激发了开发者社区的大量关注.仅仅几天之内,在Stack Overflow网站上提出的关于Swift的问题已经有500多个,在GitHub上搜索用Swift编写的库,数量已多达约350个. 对有兴趣学习这门语言的开发者,网络上提供了许多有用的入门资源: Swift程序设计语言 在iTunes里,苹果已经提供了免费的电子书<Swift语言参考手册>.访问iTunes需要使用苹果的设备,对于没有苹果设备的人来说,也

2014年11月10日android学习总结

一.线程 1.UI线程 a.Handler handler = new Handler(); Runnable runnable = new Runnable(){ public void run(){ } }; handler.post(runnable); b.Handler handler = new Handler(){ public void handlermessage(Message msg){ } }; handler.sendmessage(); 二.新线程 a.Thread