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

    输出结果:

     

  • 相关阅读:
    linux 命令行远程登录 后台运行命令的方法
    再议perl写多线程端口扫描器
    perl 函数参数传递与返回值(一)
    Linux 删除带有特殊字符的文件
    桌面云的四大协议解析
    RemoteBox 1.6 发布,VirtualBox 管理工具
    gsoap
    Open Compute Project
    基于 Arduino 开发板,这款插座是可编程且开源的
    minnowboard
  • 原文地址:https://www.cnblogs.com/scsuns520/p/1632682.html
Copyright © 2011-2022 走看看