C# 多态(通俗理解)

这里随便说说多态,看了上面继承再看看这篇。

多态:通过继承实现的不同对象调用相同的方法,表现出不同的行为。

之前的前台调用代码如下:

 1 namespace ConsoleApplication7
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             Dog dog = new Dog();
 8             dog.Name = "骨头";
 9             dog.Show();
10             //输出结果// 小狗喜欢吃:骨头
11
12
13             Cat cat = new Cat();
14             cat.Name = "鱼";
15             cat.Show();
16             //输出结果// 小猫喜欢吃:鱼
17
18             Mouse mouse = new Mouse();
19             mouse.Name ="大米";
20             mouse.Show();
21             //输出结果// 老鼠喜欢吃:鱼
22
23             Panda panda = new Panda();
24             panda.Name = "竹子";
25             panda.Show();
26             //输出结果// 熊猫喜欢吃:鱼
27
28             Console.ReadKey();
29
30         }
31     }
32 }

如你所见,每个动物类都是一个对象

狗的对象:dog

猫的对象:cat

老鼠的对象:mouse

熊猫的对象:panda

要让这些动物实现输出show()方法,你就要声明每一个对象,而上面说了,多态是:不同对象调用相同的方法,表现出不同的行为。

而且各种动物类都继承了Animal类,于是代码变成这样:

 1 namespace ConsoleApplication7
 2 {
 3     public class Animal
 4     {
 5         protected string name;
 6         public string Name
 7         {
 8             get { return name; }
 9             set { name = "新鲜的" + value; }
10         }
11         public virtual void Show()
12         {
13             Console.WriteLine("我是各种动物的父类");
14         }
15     }
16
17     public class Cat : Animal
18     {
19         public override void Show()
20         {
21             Console.WriteLine("小猫喜欢吃:" + name);
22         }
23     }
24
25     public class Dog : Animal
26     {
27         public override void Show()
28         {
29             Console.WriteLine("小猫喜欢吃:" + name);
30         }
31     }
32
33     public class Mouse : Animal
34     {
35         public override void Show()
36         {
37             Console.WriteLine("老鼠喜欢吃:" + name);
38         }
39     }
40
41     public class Panda : Animal
42     {
43         public override void Show()
44         {
45             Console.WriteLine("熊猫喜欢吃:" + name);
46         }
47     }
48
49 }

前台代码:

 1 namespace ConsoleApplication7
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7
 8             Animal animal;
 9             animal = new Dog();
10             animal.Name = "骨头";
11             animal.Show();
12
13             animal = new Cat();
14             animal.Name = "鱼";
15             animal.Show();
16
17             animal = new Mouse();
18             animal.Name = "大米";
19             animal.Show();
20
21             animal = new Panda();
22             animal.Name = "熊猫";
23             animal.Show();
24
25             Console.ReadKey();
26
27         }
28     }
29 }

结果:

小狗喜欢吃:新鲜的骨头

小猫喜欢吃:新鲜的鱼

老鼠喜欢吃:新鲜的大米

熊猫喜欢吃:新鲜的竹子

animal对象被赋值不同的实例,但是animal只调用Show()方法就得到不同的结果。

时间: 2024-10-30 07:19:59

C# 多态(通俗理解)的相关文章

关于面对对对象之接口的通俗理解

一些人写代码,按照计算机思考的那个模式写,写出来的代码,能实现功能,但是拓展性不好,而有些人写代码,是按照人看世界的那些思路去写,写出来的代码 看起来像那么回事儿,而且也非常的符合逻辑,这是为什么?为什么同样是写代码,为什么写出来的东西会完全不一样了? 最近一直在反思自己写的代码,以前写,都是为了完成某项功能而写,写完了也就完事儿了,可是最近却不是这样了,最近想打问题是,写代码是不是只要在实现功能的层面上就可以了了?后来得出的答案是,代码其实还可以写的更加的灵活多变一点的 那么今天我们就来谈谈关

通俗理解数据库隔离机制

=========================================== 原文链接: 通俗理解数据库隔离机制   转载请注明出处! =========================================== 在理解数据库隔离机制的时候发现网上很多文章都是千篇一律,解释语言太过于标准书面化,描述的晦涩难懂,因果关系模糊.在这里将自己对隔离机制的理解描述一下,力争做到能够通过浅显的语言描述出来. 数据库隔离机制是对于多线程同时操作数据库而言的.对于单线程操作数据库不存在所谓

Java中的继承、封装、多态的理解

Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(有的也称其为基类.超类),父类和子类的关系,是一种一般和特殊的关系.就像是水果和苹果的关系,苹果继承了水果,苹果是水果的子类,水果是苹果的父类,则苹果是一种特殊的水果. 3.Java使用extends作为继承的关键字,extends关键字在

关于java的this、继承、多态的理解

今天主要学习的内容是关于this.继承.多态的理解,并对其作出总结. 1.This 就目前来说,从个人的实验来看,this主要是对于一个类的对象的引用.它出现的位置主要是以它出现的形式决定的. ①.this(参数类型)这是在在构造方法中调用重写的构造方法. ②.作为某个类的对象来调用类中属性或方法.(用在某个类中的成员方法,因为某个类的对象就可以通过.来调用) 2.extends 继承之前已经了解了一些,接下来就是进一步的总结. ①.protected类型的变量是适合子类和父类之间的使用的,即使

分布式理论之一:Paxos算法的通俗理解

维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法. Paxos算法目前在Google的Chubby.MegaStore.Spanner等系统中得到了应用,Hadoop中的ZooKeeper也使用了Paxos算法,在上面的各个系统中,使用的算法与Lamport提出的原始Paxos并不完全一样,这个以后再慢慢分析.本博文的目的是,如何让一个小白在半

Activity生命周期的通俗理解

一般一个Activity有三种状态: 1.在屏幕上是可见的且可操作的,他是活跃或运行状态,负责响应用户操作. 2.失去焦点但仍然可见时,他处于暂停状态.也就是说未被完全遮蔽,所以该Activity仍对用户可见,但是当系统处于繁忙的时候下,有肯会杀死该Activity. 3.完全被另一个Activity覆盖时处于停止状态.也有可能被杀死. Activity生命周期中各方法的调用情况 1.onCreate(Bundle savedStatus):第一次创建时调用,只调用一次. 2.onStart()

SSL服务器认证过程通俗理解!

理解有错误的地方,请高手指正! 1,CA中心,有一套自己的公钥和私钥,服务器用自己的私钥去生成一个自认证的证书 2,CA中心的自认证证书是有公信力的,一般被客户端所熟知,发放到每个客户端! 3,客户端需要将CA中的自认证证书加入信任列表! 4,服务器要加入CA体系,要向CA中心申请,CA中心验证了服务器的资料后,向server发放一个证书(key),里面包含了一个秘钥 5,CA发给server的证书是用CA自己的秘钥和申请者的秘钥(key)加密过的, 6,证书里面包含:申请者的身份信息.申请者公

多态的理解

今天有开始对多态的理解加深了,基础不好的话看别人的程序很麻烦了,要不断地测试,测试--然后想想为什么,为什么--等过了一两年再看原来的基础代码的时候友开发犯迷糊了,又开始犯迷糊,然后测试测试--回忆一下为什么这样那样--     Father{      视察(){          System.out.println("大家好好工作啊,你们辛苦了!");          System.out.println("基层的每个官员给我贿赂300块大洋,我保你们平安"

理解多态AND理解父类引用指向子类对象

假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存. 现在通过代码来看看内存的分配情况: Father f = new Father();//系统将分配1M内存. Son s = new Son();//系统将分配1.5M内存. 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数. 由于s中包含了父类的实例,所以s可以调用父类的方法. Son s1 = s;/