类的继承和多态

   今天我们复习了学过的类的继承和多态 也扩展了一点没学过的知识。
 类的继承: 个人理解就是使子类可以使用父类中权限为public 和 protect  权限的方法。

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

多态:个人理解就是父类中的方法可以在子类中的同名方法以另一个内容的方式出现;

用法:

创建一个父类为哺乳动物(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();
        }
    }

 

 

 

转载于:https://www.cnblogs.com/gongth-12/archive/2012/09/04/2791684.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值