菜鸟的学习之旅——抽象方法、虚方法、接口

学习c#也有一段时间了,也了解了很多C#中的编程方法,那么现在我们回头来辨析一下抽象方法、虚方法和接口的异同点,以及怎么使用这几种方法。
其实以上三种方法都是多态的一种表现形式,都是对对象的不同表现

虚方法

关键字:virtual
结构:

 public virtual  void Show()//虚方法
        {
           Console.WriteLine("我是人别害怕");
        }

目的:只有父类中的方法变成虚方法,子类才可以重写这个方法,不然不可以
好处:子类可以有和父类不一样的方法和属性,在父类的基础之上进行更改

抽象方法

关键字:abstract
注意事项:
1、抽象方法必须放在抽象类中
2、抽象方法没有方法体
3、抽象方法不能实例化
4、如果父类是抽象类,子类继承了父类,必须把抽象类中的全部抽象方法重写
举例:

 public abstract class Animal//同样也用public
    {
        //public Person(string name,char gender,int age)
        //{
        //    this._name = name;
        //    this._gender = gender;
        //    this._age = age;
        //}
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private char _gender;
        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
        public abstract void Shout();
       
    }
    public class Pig:Animal
    {
        public override void Shout()
        {
            Console.WriteLine("哼哼叫");
        }
    }

接口

本人的理解:与类类似,是指一个类要实现的某项功能
关键字:Interface
准则:
1、接口的名称通常以“I”开头
2、必须实现接口
3、不能直接实例化接口
4、接口没有方法体
5、如果一个类即继承了类又实现了接口,那么类必须写在前面,接口写在后面,用逗号隔开
6、一个类只能继承一个父类,但可以实现多个接口。例如:一个小孩儿只有一个父亲,但是他可以有很多本领

举例:
接口:

 interface IFly
    {
        //接口指一种规范
        void IFly();
    }

主程序:

 public abstract class Person//同样也用public
    {
       
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private char _gender;
        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
    }
    public class Teacher:Person,IFly
    {
        public void Say()
        {
            Console.WriteLine("hellow,我是老师");
        }
        public void IFly()
        {
            Console.WriteLine("我也会飞");
        }
        
    }
    public class Student:IFly  //实现
    {
        public void SayHello()
        {
            Console.WriteLine("我是学生");
        }
        public void IFly()
        {
            Console.WriteLine("我会飞");
        }

    }

这个接口一般和类一起使用,那么问题来了,它和类到底是什么关系呢?其实我们可以这样来理解:把类比喻成一个小孩儿,把接口比喻成说、笑、哭、闹,小孩儿都可以说,笑,哭,闹,这些都是小孩儿具备的本领,所以类同样如此,它的这些本领是通过接口来实现的,接口来帮助类更加的规范化,功能更加的完善。

辨析类和接口

不同点:
1、接口不能实例化,类可以
2、接口不包含方法体,类包含
3、接口可以多继承,类只能单继承
4、类可以在不同的源文件之间进行拆分,而接口不可以

相同点:
1、接口、类、结构都可以从多个接口继承
2、继承接口的任何非抽象类型都必须实现接口的所有成员
3、接口和类都可以包含事件、索引器、方法和属性

继承关系

类之间不支持多继承,接口之间支持,正如一个小孩儿只能有一个爹,可以有多项本领

不知道大家有没有被这几种方法所迷惑,这几种方法确实容易混淆,但是功夫不负有心人,只要我们努力的去学,去探索,我们一定可以得到我们想要的东西的,fighting!,Let’s go!!

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值