zoukankan      html  css  js  c++  java
  • 面向对象之虚方法

    父类引用指向子类对象(基类声明变量,子类实例化)注意三种情况

    一)、基类是否有virtual,先扫描自己(基类),如果没有,调用自己(基类)的方法,当然所有继承它类的子类就不能有override方法:

        public class Person
        {
            public  void show()
            {
                Console.WriteLine("我是人");
            }
        }

        public class Student : Person
        {
            public  void show()
            {//override若存在就会报错
                Console.WriteLine("我是学生!");
            }
        }

        public class Teacher : Person
        {
            public void show()
            {
                Console.WriteLine("我是教师");
            }
        }

    父类引用指向子类对象:

    Person person = new Student();
    person.show();

    输出结果:

    二)、基类有virtual,子类是否有override,若没有,还是调用自己(基类)的方法:

        public class Person
        {
            public virtual void show()
            {
                Console.WriteLine("我是人");
            }
        }

        public class Student : Person
        {
            public void show()
            {
                Console.WriteLine("我是学生!");
            }
        }

    父类引用指向子类对象:

    Person person = new Student();
    person.show();

    输出结果:

    三)、基类含有virtual,子类有override,调用子类的方法:

        public class Person
        {
            public virtual void show()
            {
                Console.WriteLine("我是人");
            }
        }

        public class Student : Person
        {
            public override void show()
            {
                Console.WriteLine("我是学生!");
            }
        }

    父类引用指向子类对象:

    Person person = new Student();
    person.show();

    输出结果:

     

    子类实例化子类

     扫描自己是否有方法,如果没有,找基类的方法,基类若没有,再往上基类找,一直往上面找,若找不到就报错:

        public class Person
        {
            public virtual void show()
            {
                Console.WriteLine("我是人");
            }
        }

        public class Student : Person
        {

        }

    Student student = new Student();
    student.show();

    输出结果:

     

  • 相关阅读:
    C# 操作Excel之旁门左道
    C#数据类型、控件、数据类型、ADO.NET等命名规范
    tab 切换函数
    ASP.NET常用JS脚本整理
    实现MSMQ消息加密的安全实践
    关于jQuery中的offset()和position()
    SQL中使用update inner join和delete inner join
    setTimeout和setInterval
    设计漂亮的样式表是一门艺术(译) (转)
    使用jQuery制作手风琴效果(转)
  • 原文地址:https://www.cnblogs.com/scsuns520/p/1632682.html
Copyright © 2011-2022 走看看