Chapter 8. 面向对象(多态--虚方法)

namespace 多态
{
    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()
        {
            Console.WriteLine("我是人类");
        }
    }

    public class Chinese : Person
    {
        public Chinese(string name)
            : base(name)
        {

        }

        //方法重写
        public override void SayHello()
        {
            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 Korean : Person
    {
        public Korean(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);
        }
    }

    public class Englishman : Person
    {
        public Englishman(string name)
            : base(name)
        {

        }

        //方法重写
        public override void SayHello()
        {
            Console.WriteLine("我是英国人,我叫{0}", this.Name);
        }
    }
}
class Program
    {
        static void Main(string[] args)
        {
            Chinese cn1 = new Chinese("程家阳");
            Chinese cn2 = new Chinese("王旭东");
            Japanese j1 = new Japanese("树下君");
            Japanese j2 = new Japanese("井边子");
            Korean k1 = new Korean("金秀贤");
            Korean k2 = new Korean("李钟硕");
            American a1 = new American("阿黛尔");
            American a2 = new American("小甜甜布兰妮");

            Person[] p = { cn1, cn2, j1, j2, k1, k2, a1, a2,
                             new Englishman("格林"),new Englishman("玛利亚") };

            for (int i = 0; i < p.Length; i++)
            {
                p[i].SayHello();
            }
            Console.ReadLine();
    }
时间: 2024-10-11 07:24:32

Chapter 8. 面向对象(多态--虚方法)的相关文章

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

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

Python基础day-21[面向对象:多态,绑定方法]

多态: 指的是一种事物的多种形态. 例如: 数据类型有多种形态:字符串,列表,元组 动物的多种形态:狗,猫,老虎,狮子... 一个抽象类有多个子类,因而多态的概念依赖于继承. import abc class A(metaclass=abc.ABCMeta): @abc.abstractmethod def talk(self): #子类必须有 talk方法 pass class B(A): def talk(self): print('say Hi') class C(A): def talk

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

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

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

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

面向对象——多态

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

虚方法,重写————继承、多态、面向对象!

1. this 不能直接调用 非static成员class A{static public void M1(){ Hello(); // 错误 在static成员中不能 直接调用非static成员 A a=new A(); a.Hello();}public void Hello(){ F1 =10: M1(); A.M1(); this.M1() //错误 不能调用}} 2. 静态类不能new: 静态类中不能声明非静态成员. 3.sealed 密闭类不能被继承 Fromwork 4.Paint

C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多态,一种是运行时多态. 方法重载: 方法重载就是,多个方法拥有相同的方法名称,而参数个数或类型不同. 下面就是一个多态的例子,可以看到方法名称“BedRoom”被用到了2个方法中,就是2个方法有共同的方法名称"BedRoom",但是2个方法的参数是不同的. 1 class HouseOwn

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

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

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

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