zoukankan      html  css  js  c++  java
  • 面向对象之父类变量指向子类实例对象分析

    父类

    public class person
        {
    
            
            public static string markup;
    
            static person()
            {
                markup = "markup";
            }
            //无参数构造函数
            //public person()
            //{
            //    Console.WriteLine("调用person构造函数");
            //}
            public person(int parage, string paraname, string parahobby)
            {
                age = parage;
                name = paraname;
                hobby = parahobby;
            }
    
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private int age;
    
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
            private string hobby;
    
            public string Hobby { get; set; }
    
            public void SayHi()
            {
                Console.WriteLine("Person SayHi Method");
            }
    
    
        }
    

    子类

        public  class Student:person
        {
    
            public string No;
    
            //调用无参构造函数,同时调用有参数构造函数的方式
            public Student():base(123,"sdf","sd")
            {
                Console.WriteLine("调用Student的无参数构造函数");
            }
            public Student(string s):this()
            {
                Console.WriteLine("调用Student的有参数构造函数");
            }
            public void SayHi()
            {
                Console.WriteLine("大家好,我是{0},{1},{2}", this.Name, this.Age, this.Hobby);
            }
    
            
        }
    

     person stu = new Student("ss");

    1、父类变量可以指向子类的实例对象,反之则不可以。

    2、当创建一个子类对象时,如果是它的父类变量接收的它的子类对象,那么它只能调用父类的成员;(此过程中,此父类变量指向了父类成员,并没有指向这个子类成员);

    3、例外情况:通过重写(override),父类变量可以调用子类的重写方法; 

    4、子类继承父类的所有成员,但是只能访问父类的非私有成员;

    Student onestu = new Student("ss");

    1、当创建一个子类对象时,如果声明的变量也是子类类型;调用时,首先查找子类中是否有该成员,有则调用;如果没有,到它的父类中寻找,有则调用

    person stu = new Student("ss");
    Student onestu = (Student)stu;
    onestu.SayHi();

    1、强制类型转换成子类,重新指向子类的实例对象

  • 相关阅读:
    ES6+ 现在就用系列(二):let 命令
    ES6+ 现在就用系列(一):为什么使用ES6+
    程序员之网络安全系列(六):动态密码
    程序员之网络安全系列(五):数字证书以及12306的证书问题
    程序员之网络安全系列(四):数据加密之非对称秘钥
    程序员之网络安全系列(三):数据加密之对称加密算法
    ddd
    vue加载时文件的执行顺序
    Kafka安装教程(详细过程)
    Kafka的安装与使用(转)
  • 原文地址:https://www.cnblogs.com/mingjia/p/4557109.html
Copyright © 2011-2022 走看看