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

  • 相关阅读:
    springboot缓存注解——@CacheEvict
    springboot缓存注解——@CachePut
    springboot缓存注解——@Cacheable
    缓存环境
    JSR107缓存规范
    springboot自定义starter
    Linux 最常用命令整理,建议收藏!
    Spring Boot 2.2.0 正式发布,支持 JDK 13!
    厉害了,阿里史上最重要的三段代码…
    代码写成这样,老夫无可奈何!
  • 原文地址:https://www.cnblogs.com/mingjia/p/4557109.html
Copyright © 2011-2022 走看看