多态override

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace Sln0405
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             Chinese c1 = new Chinese();
13             c1.SayHello();
14
15             Person p1 = c1;
16             p1.SayHello();//p1是Person类型的变量
17             //先去看Person.SayHello,发现是virtual
18             //所以去看p1指向的对象的实际类型Chinese有没有
19             //override覆盖SayHello,如果有则调用实际类型的方法
20
21             //string s = p1.ToString();//输出类的全名
22             //(*)虚方法表(VMT)
23             object obj = p1;
24             //obj指向的是Chinese类型的对象,
25             //调用ToString()这时候发现object的ToString是virtual方法
26             //所以看Chinese有没有override ToString方法,如果有则调用
27             //Chinese的ToString,如果Chinese没有override ToString方法
28             //则看Chinese的父类有没有override ToString方法……
29             Console.WriteLine(obj.ToString());
30             Console.ReadKey();
31         }
32     }
33
34     class Person
35     {
36         public virtual void SayHello()
37         {
38             Console.WriteLine("person");
39         }
40
41         public override string ToString()
42         {
43             //return base.ToString();
44             return "我是一个人";
45         }
46     }
47
48
49     class Chinese : Person
50     {
51         public override void SayHello()
52         {
53             Console.WriteLine("chinese");
54         }
55     }
56
57     class BJ : Chinese
58     {
59         public override void SayHello()
60         {
61             base.SayHello();
62         }
63     }
64
65 }

多态override,布布扣,bubuko.com

时间: 2024-10-09 08:57:35

多态override的相关文章

重写、覆盖、重载、多态几个概念的区别分析

[仔细阅读,很不错] override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法.重写(覆盖)的规则:   1.重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.   2.重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private

重写、覆盖、重载、多态区别

override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法.重写(覆盖)的规则:   1.重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.   2.重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private).   3.重写的方

C++多态,继承,重载,隐藏,覆盖的关系

override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法.成员函数的重载(overload).覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 1   重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中: (2)函数名字相同: (3)参数不同: (4)virtual  

java基础---多态(一)

1.什么是多态? 同一个引用类型,使用不同的实例而执行不同操作(父类引用,子类对象) 2.如何实现多态 1-使用多态实现思路 2-编写父类 3-编写子类,子类重写父类方法 运行时,使用父类的类型,子类的对象 向上转型 Pet pet = new Dog(); 自动类型转换 注意:实现多态的两个要素:子类重写父类方法.使用父类的类型 3.实现多态的两种形式 使用父类作为方法形参实现多态 使用父类作为方法返回值实现多态 4.使用父类作为方法形参实现多态 举例: public class Master

Python_09-面向对象编程

目录: 1       面向对象编程1.1    简单例子1.2    调用1.3    python命名规范(约定)1.4    类的设计1.4.1 Exception 异常捕获结构1.4.2 自定义异常1.4.3 __init__. 1.4.4 __new__. 1.4.5 __new__ 的作用1.4.6 用__new__来实现单例1.4.7 静态方法1.4.8 类方法1.5    面向对象编程1.5.1 Python支持多继承1.5.2 多态 (override overload) 1.

c#基础浅学

C# 程序设计 第一章 初识 .NET Framework 和 C# .NET Framework 是支持生成和运行下一代应用程序和 Web 服务的内部Windows组件 .NET Framework 的关键组件为公共语言运行时(CLR)和 .NET Framework 类库(.dll) .NET Framework 提供了托管执行环境,简化的开发和部署以及与各种编程语言的集成(跨语言的平台) .NET Framework 具有两个主要组件:公共汉语言运行时(CLR) .NET Framewor

第五题(重写,重载)

很基础的一个题 谈谈override,overload,polymorphism override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: 1.重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. 2.重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>prot

java后端研发经典面试题总结

垃圾回收算法 1.标记-清除算法 标记-清除算法是最基本的算法,和他的名字一样,分为两个步骤,一个步骤是标记需要回收的对象.在标记完成后统一回收被标记的对象.这个算法两个问题.一个是效率问题,标记和清除的效率不高.第二个问题是标记-清除之后会有大量不连续的碎片空间,如果我们需要更大的连续内存就必须GC. 2.复制算法 复制算法,不同于标记-清除,复制算法大多数用于新生代,它需要大小相等的两块内存,每次只使用一块内存,当GC的时候会把这块内存存活的对象复制到另外一块内存上面,解决了时间效率和空间碎

java基础知识点回顾

java基础数据类型 bollean 1 char 2 byte 1, short 2 , int 4, long 8 float 4, double 8 ----------------------------------------------------- java 四大特征 抽象,封装,继承,多态 ---------------------------------------------------- override 和 overload override(重写):子类重写父类方法体,