C#学习之抽象类和方法

坚持 成长 每日一篇

抽象方法有以下特征:

1.一个抽象方法可以看作是一个虚函数。

2.抽象方法的声明只能发生在抽象类中。

3.因为抽象方法声明只提供一个无实现的方式,没有方法体

4.方法体的实现被覆写方法提供,覆写方法是一个类的成员。

5.抽象属性的行为和抽象方法相像,除了不同的声明形式。

6.在一个静态属性中使用abstract 是一个错误(因为抽象方法不存在)。

*一个抽象属性能够通过派生类使用 override 实现.

抽象类具有以下特征:

1.抽象类不能被实例化。

2.抽象类可以包含抽象方法和访问器

3.不能把抽象类用密封(sealed)来修饰,那就意味着类不能被继承,这违反抽象类被继承的原则。

4.一个派生于一个抽象类的非抽象类必须包括所有的继承来的未实现的抽象方法和访问器的实现

5.在方法和属性中使用abstract 关键字意味着包含它们的实现。

using System;
namespace C的抽象类的使用
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello World!");

            Chinese chinese = new Chinese ();
            chinese.Speack ();
            chinese.Run ();
            chinese.Smile ();
            Console.WriteLine ();

            Japanise japan = new Japanise ();
            japan.Speack ();
            japan.Run ();
            japan.Smile ();
            Console.WriteLine ();

            BlueCat blueCat = new BlueCat ();
            blueCat.Sleep ();
            blueCat.Breath ();
            blueCat.Speack ();
        }

        //在C#中使用关键字 abstract 来定义抽象类和抽象方法
        //不能初始化,实例化的类叫抽象类,他们只提供部分类的实现,其他非抽象类可以继承抽象类来实例化。
        //抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类
        //成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。
        abstract class Human
        {
            //一个抽象方法不能含有方法体,且必须属于抽象类
            abstract public void Speack();
            abstract public void Run();
            //抽象类可以包含非抽象方法
            public virtual void Smile(){
                Console.WriteLine ("你好!人类的微笑");
            }

        }
        //非抽象类继承抽象类必须实现用override实现所有抽象类的抽象方法,如果抽象类有抽象父类或祖宗有抽象方法为实现,在这里必须实现。
        class Chinese:Human
        {
            public override void Speack(){
                Console.WriteLine("中国人说话");
            }
            public override void Run(){
                Console.WriteLine("中国人奔跑");
            }
        }

        //子抽象类继承了抽象类可以实现部分的抽象方法(称为抽象类的部分实现),非抽象子类继承了子抽象类必须实现子抽象类为实现的方法,和子抽象类自身的抽象方法
        abstract class YellowHuman : Human
        {
            override public void Speack(){
                Console.WriteLine("YellowHuman Speak");
            }
            abstract public void ShowFace();
        }
        class Japanise : YellowHuman
        {

            override public void Run(){
                Console.WriteLine("日本人奔跑");
            }
            override public void ShowFace(){
                Console.WriteLine("日本人是黄种人");
            }

        }


        //抽象类可以继承非抽象类和接口
        //一个抽象类必须为所有的接口成员提供实现
        //一个用于实现接口的抽象类可能把接口方法安排到抽象方法上。
        interface AnimalsMethod{
            void Sleep();
            void Speack();
        }

        class Animals{
            public void Breath(){
                Console.WriteLine("这是动物的呼吸");
            }
        }

        abstract class Cat:Animals, AnimalsMethod{
            abstract public void Speack();
            public void Sleep(){
                Console.WriteLine ("这是一只猫的睡眠");
            }

        }
        class BlueCat:Cat
        {
            override public void Speack(){
                Console.WriteLine("这是一只蓝猫");
            }
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值