重写虚方法,多态的使用

重写(override)特点:
1、要有继承关系
2、方法原型要一致(修饰符、返回类型、方法名、参数列表一致)
3、加上override关键字,重写父类的方法(该父类方法要有virtual、abstract进行修饰)

  /// <summary>
    /// 狗类(父类)
    /// </summary>
    class Dog
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Color { get; set; }

//定义虚方法
        public virtual void Run()
        {
            Console.WriteLine("速度:一般");
        }

//重写Object基类的ToString()方法
        public override string ToString()
        {
            return "名称:" + this.Name + " 年龄:" + this.Age + " 毛色:" + this.Color;
        }

//重写Object的Equals方法(注意:Object的Equals是比较对象的引用是否相等,本方法重写后是比较对象里面的属性值是否全部相等)
        public override bool Equals(object obj)
        {
            Dog dog = obj as Dog;
            if (dog.Name == this.Name && dog.Age == this.Age && dog.Color == this.Color)
            {
                return true;
            }
            return false;
        }
    }

/// <summary>
    /// 格力犬
    /// </summary>
    class GLDog:Dog
    {

//重写虚方法
        public override void Run()
        {
            Console.WriteLine("速度:最快");
        }
    }

/// <summary>
    /// 猎狗类
    /// </summary>
    class LGDog:Dog
    {
        public override void Run()
        {
            Console.WriteLine("速度:快");
        }

public void Method()
        {
            Console.WriteLine("aaa");
        }
    }

/// <summary>
    /// 狮毛狗
    /// </summary>
    class SMDog:Dog
    {

//由于狮毛狗速度一般,所以直接使用父类的Run方法即可
    }

//使用

class Program
    {
        //方法的普通使用
        //static void Main(string[] args)
        //{
        //    Dog dog1 = new Dog();
        //    dog1.Run();
        //    SMDog dog2 = new SMDog();
        //    dog2.Run();
        //    LGDog dog3 = new LGDog();
        //    dog3.Run();
        //    GLDog dog4 = new GLDog();
        //    dog4.Run();
        //}

//多态的使用1(特点:在多态形式下调用重写方法时,不会执行父类被重写的方法,而会执行子类中重写的方法)
        //static void Main(string[] args)
        //{
        //    //多态的表现形式(父类引用指向子类对象,即子类对象存入父类变量)
        //    Dog dog = new LGDog();
        //    dog.Run();//输出  速度:快
        //    dog = new GLDog();
        //    dog.Run();//输出  速度:最快
        //}

//多态的使用2
        //static void Main(string[] args)
        //{
        //    Dog[] dogs = new Dog[3];
        //    SMDog sm = new SMDog();
        //    LGDog lg = new LGDog();
        //    GLDog gl = new GLDog();
        //    dogs[0] = sm;
        //    dogs[1] = lg;
        //    dogs[2] = gl;
        //    foreach (Dog dog in dogs)
        //    {
        //        dog.Run();
        //    }
        //}

//多态的使用3
        //static void Main(string[] args)
        //{
        //    SMDog dog1 = new SMDog();
        //    Method(dog1);
        //    LGDog dog2 = new LGDog();
        //    Method(dog2);
        //    GLDog dog3 = new GLDog();
        //    Method(dog3);
        //}
        //public static void Method(Dog dog)
        //{
        //    dog.Run();
        //}

//重写ToString()测试
        //static void Main(string[] args)
        //{
        //    Dog dog = new Dog() {Name="小黄",Age=2,Color="黄色" };
        //    Console.WriteLine(dog.ToString());
        //}

//Equals重写测试
        //static void Main(string[] args)
        //{
        //    Dog dog1 = new Dog() { Name = "小白", Age = 2, Color = "白色" };
        //    Dog dog2 = new Dog() { Name = "小白", Age = 2, Color = "白色" };
        //    //Dog dog2 = dog1;
        //    Console.WriteLine(dog1.Equals(dog2));
        //}

//了解GetType方法
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Console.WriteLine("公共方法如下:");//公共方法不包含构造方法
            MethodInfo[] methods = dog.GetType().GetMethods();
            foreach (MethodInfo item in methods)
            {
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("成员如下:");
            MemberInfo[] members = dog.GetType().GetMembers();
            foreach (MemberInfo item in members)
            {
                Console.WriteLine(item.Name);
            }
        }
    }

重写虚方法,多态的使用,布布扣,bubuko.com

时间: 2024-10-05 12:32:53

重写虚方法,多态的使用的相关文章

通过重写虚方法实现加法运算

实现效果: 知识运用: 虚方法:允许被其子类重新定义的方法 声明时使用virtual修饰符 重写方法:使用相同的签名重写继承的虚方法  两者联系:虚方法主要用来引入新方法 而重写方法则使从基类继承而来的虚方法的专用化(其具体实现) 实现代码: /// <summary> /// 建立的虚方法可以在子类中被重写 /// </summary> class Operation { public virtual double operation(double d,double b) { r

C# - 重写虚方法

项目目录: 创建教师类(Teacher),虚方法有Teach(); 创建学生类(Student),重写的方法是Teach(); 教师类: · 加上关键字 Virtual 就是声明可以重写此方法. using System; namespace Test_Console { public class Teacher { public virtual void Teach() { Console.WriteLine("\t--> 教师类中的讲课方法,可以重写此方法,不重写可以直接调用!\n&q

C#继承,重写虚方法的使用笔记

一,如下例子 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DemoTest { class Program { static void Main(string[] args) { B a = new B(); } } public class A { public A() { Say(); } protected virtual void Say()

多态、虚方法、重写

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

多态实现之--虚方法

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

C#虚方法和抽象方法区别

虚方法: 1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.2.virtual方法可以直接使用,和普通方法一样.3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写.virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别相应的sealed关键字标示此方法不可以被重写 抽象方法: 1.抽象方法没有提供实现部分. 2.抽象方法只能在抽象类

虚方法、抽象类

虚方法: 1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑. 2.virtual方法可以直接使用,和普通方法一样 3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写 virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别 相应的 sealed关键字标示此方法不可以被重写 虚方法和抽象方法的区别: 1.虚方法可以有实现体,抽象方法不能

抽象方法和虚方法 与设计模式

一.概念 抽象方法和虚方法是什么?先写一段代码看看他们俩的区别. 抽象方法使用abstract关键字:虚方法使用virtaul关键字. <span style="font-size:18px;">//抽象方法 Public abstract class TestPaper { Public abstract Answer(): } </span> <span style="font-size:18px;">//虚方法 Public

虚方法与抽象方法

虚方法: 1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑. 2.virtual方法可以直接使用,和普通方法一样 3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写 virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别 相应的 sealed关键字标示此方法不可以被重写 虚方法和抽象方法的区别: 1.虚方法可以有实现体,抽象方法不能