多态之虚方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Chinese c1 = new Chinese("韩梅梅");
            Chinese c2 = new Chinese("李雷");
            Japanese j1 = new Japanese("树下");
            Japanese j2 = new Japanese("田中");
            Korea k1 = new Korea("金秀贤");
            Korea k2 = new Korea("金秀贤2");
            American a1 = new American("科比1");
            American a2 = new American("科比2");
            Person[] pers = {c1,c2,j1,j2,k1,k2,a1,a2};

            for (int i = 0; i < pers.Length; i++)
            {
                //if(pers[i] is Chinese)
                //{
                //    ((Chinese)pers[i]).SayHello();
                //}
                //else if(pers[i] is Japanese)
                //{
                //    ((Japanese)pers[i]).SayHello();
                //}
                //else if(pers[i] is Korea)
                //{
                //    ((Korea)pers[i]).SayHello();
                //}
                //else if(pers[i] is American)
                //{
                //    ((American)pers[i]).SayHello();
                //}
                pers[i].SayHello();
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        private string _name;//字段

        public string Name//属性
        {
            get{return _name;}
            set{_name = value;}
        }

        public Person(string name)//构造函数
        {
            this.Name = name;
        }

        public virtual void SayHello()//方法 virtual 虚方法,这个方法可以被子类重写
        {
            Console.WriteLine("我是人类");
        }
    }

    public class Chinese:Person
    {
        public Chinese(string name):base(name) //调用父类构造函数,外面传进一个name,传给父类一个name
        {
            //不用写代码,父类的构造器已经赋值给属性Name
        }
        public override void SayHello()//override重写 父类方法
        {
            Console.WriteLine("我是中国人,我叫{0}",this.Name);
        }
    }
    public class Japanese:Person
    {
        public Japanese(string name)
            :base(name)
        { }
        public override void SayHello()
        {
            Console.WriteLine("我是霓虹人,我叫{0}",this.Name);
        }
    }
    public class Korea:Person
    {
        public Korea(string name)
            :base(name)
        { }
        public override void SayHello()
        {
            Console.WriteLine("我是棒子人,我叫{0}",this.Name);
        }
    }
    public class American:Person
    {
        public American(string name)
            :base(name)
        { }
        public override void SayHello()
        {
            Console.WriteLine("我是米国人,我叫{0}",this.Name);
        }
    }
}
时间: 2024-12-28 15:51:36

多态之虚方法的相关文章

多态,虚方法重写,抽象类,接口

简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写 子类重写父类的方法使用的是override关键字 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 多态 { public

多态、虚方法、重写

多态: 同样都是继承了同一个父类,但是父类中的方法并不使用任何一个子类,那么在这就需要子类重新编写这个方法的主体 1.需要父类同意子类可以重新编写自己的方法,virtual - 虚方法 2.子类只能重写父类允许重写的方法,只能重写虚方法,override - 重写覆盖虚方法 所有的类都可以当做父类,都可以有虚方法 Program   类 using System; using System.Collections.Generic; using System.Linq; using System.

面向对象--多态、虚方法重写、抽象类、接口

多态: 一个父类有多个子类,每个子类都不尽相同 有了继承,才有了多态 虚方法:关键字 virtual 重写  override 父类中的方法在子类中并不适用,那么子类需要自主更改继承的方法或是属性, 父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字 fly.cs中: namespace 多态 { public class fly { public virtual string fling() { return "拍翅膀飞"; } }

C# 多态(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现) 前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象的魅力体现了出来,那就是多态,多态用的好,可以提高程序的扩展性.常用的设计模式,比如简单工厂设计模式,核心就是多态. 其实多态就是:允许将子类类型的指针赋值给父类类型的指针.也就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时

48.C#--多态之虚方法

static void Main(string[] args){//多态概念:让一个对象能够表现出多种的状态(类型)//实现多态的3种手段:1.虚方法 2.抽象类 3.接口//以下例子用虚方法来实现:普通员工九点打卡,经理十点打卡,设计师不用打卡//创建普通员工对象,经理对象,设计师对象Employee emp = new Employee();Manager man = new Manager();Designer des = new Designer();//Employee[] emps

使用虚方法和多态来改善源代码的扩展性

-多态:(转自CSND) 通过继承,一个类可以用作多种类型:可以用作它自己的类型.任何基类型,或者在实现接口时用作任何接口类型.这称为多态性.C# 中的每种类型都是多态的.类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object当作基类型. 多态性不仅对派生类很重要,对基类也很重要.任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象.基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面.例如,表示汽车的基类可能包含这样的行为:当考虑的汽

多态实现之--虚方法

多态实现共有三种途径,分别是:虚方法.抽象类.接口,本篇讲述第一种方法:虚方法. 1. 什么是虚方法?虚方法,从语法上来说是被virtual关键字修饰的方法,从含义上讲,这个方法在类被继承后可以在子类重写(override). 2. 在子类中重写虚方法需要注意哪些问题?首先说明的是,子类中的重写并不是必须的,因为父类中的虚方法本身也是有函数体的(除非是抽象方法),所以如果进行重写则会覆盖从父类中的虚方法,否则直接调用父类的该方法. 3. 是怎样体现多态的?在调用的时候子类只需要调用同一个方法,如

多态—虚方法、抽象类、接口

修饰符:public : 公共的,引用命名空间即可随意访问,访问权限最高:private : 私有的,只有在声明它的类和结构中才可以访问,访问权限最低: Internal : 内部的,同一个程序集中所有的类都可以访问,程序集就是命名空间, 访问权限次最高,这个访问修饰符是默认的:Protected : 受保护的,只能在他自己和自己的子类中才能访问. --------------------------------------------------------------------------

浅谈C# 多态的魅力(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现) 分类:             asp.net             C#              2014-02-08 11:29     786人阅读     评论(0)     收藏     举报 浅谈C# 多态的魅力(虚方法,抽象,接口实现) 前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向