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、强制类型转换成子类,重新指向子类的实例对象

  • 相关阅读:
    区块链 超级节点什么鬼?
    堆排序--模版类
    梯度下降算法Python简单试验
    svn: Can't convert string from 'UTF-8' to native encoding
    常用加密算法比较
    快速排序结合插入排序
    无法解析的外部符号
    mysql 远程连接出错问题
    50个C/C++经典面试题
    设计算法找出字符串中重复出现最长的子串
  • 原文地址:https://www.cnblogs.com/mingjia/p/4557109.html
Copyright © 2011-2022 走看看