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();

    输出结果:

     

  • 相关阅读:
    Watching Fireworks is Fun
    数字计数
    HashMap源码解析
    ArrayLIst、Vector和LinkedList三者的区别
    Vector源码解析
    LinkedList源码解析
    ArrayList源码解析
    计算机网络笔记——第二章、物理层
    计算机网络笔记——第一章、概述
    2020-3-5 牛客试题复盘
  • 原文地址:https://www.cnblogs.com/scsuns520/p/1632682.html
Copyright © 2011-2022 走看看