c#的继承

粗略记录一下继承基本都写字代码里了。

子类实例化的时候一定会调用父类默认构造方法,除非指定到别的构造方法。

base就是用来调用的关键字。。。

base()括号里面没有参数说明还是调用默认的构造方法,如下图的mammal的注释掉的那行就是默认的构造方法。





若是括号里有参数如下图:base(name)。。。就要调用上图中的Mammal里的public Mammal(string mamalName)这个方法了。。。。







这儿是父类的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InherienceDemo
{
    class Mammal
    {
        protected   string name;
        public Mammal() { }
        public Mammal(string mamalName)
        { 
            name = mamalName;
        }

        public void Talk()
        {
            Console.WriteLine("Mamale Talking.");
        }

        public string getName()
        { 
            return name;
        }

        public virtual void Breath() //override子类重写父类的方法(只有父类方法是virtual的才能override)
        {
            Console.WriteLine(name+",正在呼吸");
        }
        public void SuckleYoung()
        {
            Console.WriteLine(name+",正在哺乳");
        }
    }
}


下边是子类的代码


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InherienceDemo
{
    class Horse : Mammal
    {
        //public string name;
        public Horse(string name)
            : base(name)
        { 
        
        }



        new public void Talk()//new关键字是子类隐藏继承的父类中的方法(这样外部再调用就是调的子类的不是父类的了,父类的方法被new之后隐藏了,只有子类的方法了)
        {
            
            Console.WriteLine("Horse Talking.");
        }

        public override void Breath() //override子类重写父类的方法(只有父类方法是virtual的才能override)
        {
            Console.WriteLine("马正在呼吸");
        }

        public void Trot()
        {
            //this.Breath();
            Console.WriteLine(base.getName() + ",正在奔跑");
        }
    }
}


接下来是外部调用的代码(这里是很重要的关键父类对子类的引用)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InherienceDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Mammal mamal = new Mammal("mm");
            
            mamal.Breath();
            //mamal.SuckleYoung();
            mamal.Talk();

            Horse horse = new Horse("hh");
           
            horse.Breath();
            //horse.SuckleYoung();
           // horse.Trot();
            horse.Talk();

            //Whale whale = new Whale("ww");
            //whale.Breath();
            //whale.SuckleYoung();
            //whale.Swim();

            //父类引用可以引用子类的对象。
            //父类引用只能调用子类继承自父类的方法。父类引用不能调用子类独有的方法。
            //new关键字是子类隐藏继承的父类中的方法(这样外部再调用就是调的子类的不是父类的了,父类的方法被new之后隐藏了,只有子类的方法了)
            //override子类重写父类的方法(只有父类方法是virtual的才能override)
            //父类引用可以调用子类重写父类的方法,而不是调用父类原来的方法。
            Mammal newMamal  = new Horse("hh");
            newMamal.Talk();
            //newMamal.getName();
            //newMamal.SuckleYoung();
            newMamal.Breath();

            //try
            //{
            //    //子类引用不能直接引用父类对象,除非将父类对象的数据类型强制转换成子类
            //    Horse newHorse = (Horse)new Mammal("aa");
            //    //newHorse.Breath();
            //    //newHorse.SuckleYoung();
            //    //newHorse.getName();
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine(ex.Message);
            //}
           
        }
    }
}

override特别注意:





protected修饰后只能被继承了的子类访问到,类外部不能访问。。。如下图;





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值