八.继承(方法的调用)

目录

1.认识

2.子/父类实例化指向本身(只实例化)

3. 父类引用指向子类对象(只实例化)

4.继承中方法的调用

4.1父类引用指向子类对象调用普通方法

4.2 父类引用指向子类对象调用重写(override)方法 

4.3 子类本身实例化调用方法


1.认识

1.继承是面向对象程序设计中最重要的概念之一;是面向对象的三大特征之一;

2.可以理解为子类(派生类)继承父类(基类);

3.实例化类的时候会默认调用构造函数;

4.可以父类引用指向子类对象,也可以父类指向父类,子类执行子类

5.只要实例的对象为子类,都会先调用父类构造;

6.格式:class 基础类

                class 派生类:基类

7.父类,子类案例

class Person
    {
        public int Age { get; set; }
        public string Sex { get; set; }

        public Person(int age, string sex)
        {
            this.Age = age;
            this.Sex = sex;
            Console.WriteLine("我是父类构造");
        }
        public void Test()
        {
            Console.WriteLine($"我是{Sex},今年{Age}岁了");
        }
    }
    class Boy : Person
    {
        public Boy(int age, string sex) : base(age, sex)
        {
            this.Age = age;
            this.Sex = sex;
            Console.WriteLine("我是男孩子类构造");
        }

    }
    class Gril : Person
    {
        public Gril(int age, string sex) : base(age, sex)
        {
            this.Age = age;
            this.Sex = sex;
            Console.WriteLine("我是女孩子类构造");
        }
    }

2.子/父类实例化指向本身(只实例化)

实例化父类本身只会调用本身的构造函数;

//调用父类
  Person person = new Person(10, "人类");
//结果:我是父类构造

实例化子类本身:会先调用父类的构造函数,再调用子类的构造函数;

 Boy b = new Boy(10, "男孩");
//结果:我是父类构造
        我是男孩子类构造

3. 父类引用指向子类对象(只实例化)

会先调用父类的构造函数,再调用子类的构造函数;


//调用
            Person person1 = new Boy(10, "男孩");
            Person person2 = new Gril(10,"女孩") ;
//结果:字段参数调用响应对象参数
我是父类构造
我是男孩子类构造
我是父类构造
我是女孩子类构造

4.继承中方法的调用

4.1父类引用指向子类对象调用普通方法

当调用方法为普通方法时,此时还是属于父类的引用,因此不能调用子类的方法(需要子类自己实例调用)。

但是因为继承,同时父类指向的子类对象,子类对象也可以调用父类中的方法。

当输出带有字段的时候,字段参数会自动调用相应子类对象的参数;

可以用于   输出相同的语句,只有字段不同的  时,在父类中写一个方法,子类对象调用(子类数据通过父类展示)

Person person1 = new Boy(10, "男孩");
Person person2 = new Gril(10,"女孩") ;
 person.Test();
 person2.Test();
 person1.Test();

//父类普通方法
  public void Test()
        {
            Console.WriteLine("父类方法");
            Console.WriteLine($"我是{Sex},今年{Age}岁了");
        }


//结果
父类方法
我是人类,今年10岁了
父类方法
我是女孩,今年10岁了
父类方法
我是男孩,今年10岁了

4.2 父类引用指向子类对象调用重写(override)方法 

在继承中,子类重写方法,父类对应的方法是需要为 虚方法即(value关键字定义);

此时,子类对象不想输出父类方法的内容时,可以给使用虚方法,然后在子类中重写;

//父类虚方法:
public virtual void Print()
        {
            Console.WriteLine($"我是{Sex},今年{Age}岁了");
        }
//子类重写
public override void Print()
        {
            Console.WriteLine("我是男孩重写");
        }
 //重写调用
            person.Print();
            person1.Print();
            person2.Print();
//结果:
我是人类,今年10岁了
我是男孩重写
我是女孩重写

4.3 子类本身实例化调用方法

上面说过 子类本身实例时,会默认调用构造函数,同时因为继承原因,会优先调用父类的构造函数。调用方法的时候只会调用自己的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄荷撞~可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值