【编程基础】程序小白脸盲症之重载、重写、多态
来源:互联网 发布:linux libc 源代码 编辑:程序博客网 时间:2024/06/06 20:44
【前言】
不知道大家的情况如何, 我在看到这一溜名词的时候就是想起了一句蔡依林的一句歌词——老虎、老鼠傻傻分不清楚。作为一名程序小白,在这几位老兄一同出现的那一刻,瞬间就患了脸盲症。不过不用担心,有病不要紧,关键咱有药呀。。
【正文】
首先是用导图来展示一些对比分析的思路。
下面用文字阐述一下:
一、对谁来用
重载:发生在一个类的几个同名方法上
重写:发生在父类与子类之间
二、用来干嘛
重载:让一个类中的一个方法,在接受参数类型不同时,产生不同效果
重写:一般使用重写是为了实现多态,就是在代码中用子类替代父类时,产生子类特有的效果。还不太明白的话,看下面的例子。
三、怎么用
用两个例子来展示一下:
(代码借鉴自《大话设计模式》)
重载例子:
首先我们默认小猫都是有名字的,所以有了第一个构造函数(参数为名字字段)。 但是我们有需要没有名字的小猫可以生成,所以重载了构造函数(没有参数)
<span style="font-size:24px;">namespace ConsoleApplication2{ class cat { private string name = ""; public cat (string name ) //构造函数 { this .name =name ; } public cat () //构造函数重载 ,,注意()参数不同类型哦。。 { this .name ="无名"; } public string Shout() { return "我的名字叫"+name +"喵"; } }} </span>
重写例子:
动物叫声大赛,猫和狗都要叫。
<span style="font-size:24px;">class Animal //<span style="color:#ff0000;">Animal 类,猫狗的父类</span> { protected string name = ""; public Animal (string name ) { this.name = name; } public Animal () { this.name = "无名"; } protected int shoutNum = 3; public int ShoutNum { get { return shoutNum; } set { shoutNum = value; } } public virtual string shout() <span style="color:#ff0000;">//叫的虚方法。 {</span> return ""; }} </span>
猫的实现
<span style="font-size:24px;"> class Cat : Animal { public Cat() : base() { } public Cat(string name) : base(name) { } public override string shout() <span style="color:#ff6666;">//子类狗的方法重写</span> { string result = ""; for (int i = 0; i < shoutNum; i++) result += "喵,"; return "我的名字叫" + name + "" + result; } }</span>
狗的实现
class dog:Animal { public dog ():base() {} public dog(string name) : base(name) { } public override string shout() { string result=""; for (int i=0;i <shoutNum ;i++) result +="汪,"; return "我的名字叫"+name +""+result ; } }
客户端代码:
<span style="font-size:24px;">ublic partial class Form1 : Form { public Form1() { InitializeComponent(); } private Animal[] arrayAnimal; private void button2_Click(object sender, EventArgs e) { arrayAnimal =new Animal[5]; arrayAnimal [0]=new Cat("小花"); arrayAnimal [1]=new dog ("阿毛"); arrayAnimal [2]=new Cat("娇娇"); arrayAnimal [3]=new dog ("小黑"); arrayAnimal [4]=new Cat ("咪咪"); } private void button1_Click(object sender, EventArgs e) { foreach (Animal item in arrayAnimal ) <span style="color:#ff6666;"> //子类来替代父类 多态的实现</span> { MessageBox.Show (item.shout ()); } } }</span>
【总结】:
重载在一个类中, 重写在子类父类中,多态通过子类替代父类由虚方法重写实现。。你分清楚了吗?
0 0
- 【编程基础】程序小白脸盲症之重载、重写、多态
- Java基础之继承、多态、重载、重写
- PHP面向对象编程之--多态:方法重载与重写
- Java 7之基础 - 重载与重写
- OO基础:继承+多态+重载+重写
- Java基础:多态(重载和重写)
- C++基础-重载/重写/重定义/多态
- 【编程基础】——方法重载、重写、重构
- Android基础之Java多态、继承、重载和重写的区别
- Java基础随笔之重载、重写、以及可变参数
- Java基础之方法重载和方法重写
- JAVA基础之重载与重写的区别
- Java基础之重写(覆写)与重载区别
- Java基础之重写(覆写)与重载区别
- java基础之方法的重载和重写
- Java基础之重写和重载谁是谁
- Java面向对象编程之重载(overload)和重写(override)
- java 基础 重写和重载
- 图层Layer
- iOS—cell中右边一栏的accessoryView
- 详细记录python的range()函数用法
- Android - JSON Parser Tutorial
- ZOJ-2855-Google Map【4th浙江省赛】
- 【编程基础】程序小白脸盲症之重载、重写、多态
- 40个Java集合面试问题和答案
- Android 框架
- Java 字符类型
- 动画 Animation
- php中的全局变量$_REQUEST
- 宣化上人: “肉字里边两个人, 里边罩着外边人; 众生还吃众生肉, 仔细思量人吃人。”
- 大数据系列文章汇总 - 更新到15篇
- 2.4.1Python控制流