c#的继承

来源:互联网 发布:羽毛球 直播软件 编辑:程序博客网 时间:2024/06/03 13:47

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

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

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
原创粉丝点击