C# 面向对象之继承详解

概念

继承就是子承父业,子类继承父类的字段(数据成员)和方法  

合理继承?

继承关系需要符合逻辑不能为了继承而继承,只有当一个类在逻辑上属于另一个类时(老虎属于动物,树属于植物)继承就是合理的

同时一个类只能有一个父类 即单继承类

使用方法

          class Animal
        {

        }

        class Tiger:Animal  //Tiger 类继承 Animal类
        {

        }

 base

base有点类似c++中的this

在子类中可以使用base调用父类的方法 也可以在子类构造函数的初始化列表调用父类的构造构造函数,但是在静态类中不能使用base

 class Program
    {
        static void Main(string[] args)
        {

            Tiger t = new Tiger("胖虎");

            t.Test();//输出胖虎
        }

        class Animal     //父类
        {
            public Animal(string name)
            {
                _name = name;
            }
            protected string _name;
            public void PrintName()
            {
                Console.WriteLine(_name);
            }
            
        }
        class Tiger:Animal
        {
          public  Tiger(string name):base(name)  //使用base在初始化列表调用父类构造函数
            {

            }
            public void Test()
          {
              base.PrintName(); //调用父类的函数
          }

        }
    
    }

overide与new

override用与重写父类的virtual或abstract 方法

new

我们大多数认为new是用于创建对象的

但new还有另一个用法:用于修饰子类中与父类重名的方法表示覆盖

在子类中此方法将覆盖从父类中继承过来的同名方法 但是不会改变父类中的同名方法

 class Program
    { 
        static void Main(string[] args)
        {

            Tiger t = new Tiger("胖虎");

            t.PrintName();  //输出 print tiger name:胖虎
        }
        class Animal
        {
            public Animal(string name)
            {
                _name = name;
            }
            protected string _name;
            public void PrintName()
            {
                Console.WriteLine(_name);
            }
            public virtual void Eat()
            {
                Console.WriteLine("animal eat");
            }            
        }
        class Tiger:Animal
        {
            public  Tiger(string name):base(name)
            {

            }
    
           public  override void Eat()     //子类重写父类方法
           {
            Console.WriteLine("tiger eat");
            }
            public new void PrintName()   //覆盖父类同名方法
           {
                Console.WriteLine("print tiger name:{0}",_name);

           }
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值