您的位置:首页 > 编程语言 > C#

9-4c#类的继承和多态

2012-09-07 07:49 134 查看
2012-09-04     类的继承和多态

 

 

类的继承: 就是指能够从它的父类中继承初构造函数以外的所有数据的定义和功能。

格式   子类名:父类名{ };

多态:就是指类为名称相同的方法提供不同的实现方式。

用法:

创建一个父类为哺乳动物(Mammal)类,子类是马(House)类和鲸鱼类(Whale);

Mammal.cs  哺乳动物类

  class Mammal

    {

        private string name;

        public Mammal(string fname)

        {

            name = fname;

        }

        public string GetName()   //因为父类中的name权限为private,这个方法是为了让子类中的方法也可以使用的了传过来的姓名。

        {        

            return name;

        }

        public virtual void breath() // 如果预料到此方法在将来会被重写,则这个方法必须被声明为 virtual ;

        {

            Console.WriteLine(name+"正在用肺呼吸。。。");

        }

        public void suckleyoung() {

            Console.WriteLine(name+"正在哺乳。。。");

        }

    }

Whale.cs 鲸鱼类

class Whale:Mammal   //继承与哺乳动物类

    {

        public Whale(string name) : base(name) { }  //这是为了让子类初始化一个实例的名能够传到父类的name,使父类的构造函数运行; base 是子类传给父类东西的关键字

        public void swim() {

            Console.WriteLine(GetName()+"....."); //用父类的GetName()方法来获得传到父类的名称。

        }

        public new void suckleyoung()  //用 new 来重写就可以不用在父类中的同名方法中声明 virtual ;

        {

            Console.WriteLine(GetName()+"正在为孩子");

        }

    }

House.cs 马类

class House:Mammal

    {

        public House(string name) : base(name) { }

       

        public void run() {

            Console.WriteLine(GetName()+"我在跑步");

        }

        public override void breath()  //要用Override重写方法 在父类中的同名方法处必须声明 virtual ;

        {

            Console.WriteLine(GetName() + "正在呼吸。。。");

        }

    }

 

Program 类

  class Program

    {

        static void Main(string[] args)

        {

            Mammal f = new Mammal("哺乳动物");

            f.suckleyoung();

            House h = new House("小马");

           

            h.run();

            h.breath();

            Whale w = new Whale("小鲸");

            w.suckleyoung();

          

            //类的赋值

            //父类可以引用子类对象。

            //父类引用只能调用子类继承父类的方法,父类引用不能调用子类独有的方法。

            Mammal ss = new House("ss");

            ss.breath();

            ss.suckleyoung();

            //子类引用不能直接赋值父类对象,除非将父类对象进行强制转换

            //编译ok,运行异常

            try

            {

                Whale SSS = (Whale)new Mammal("sss"); //将父类对象强制转换为 Whale子类对象 虽然可以编译成功但却不能执行任何父类和子类的方法。

                SSS.breath();

            }

            catch(Exception ex) {

                Console.WriteLine(ex.Message);  //将执行期间发生的错误写出来。

            }

            w.swim();

            Console.ReadKey();

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# string class exception