抽象类和接口区别

1·属性定义:

抽象类中可声明字段,但接口不能有字段,不能有修饰符,比如public,private等。

 

2·方法的定义:

       抽象类必须有抽象方法,也可有非抽象方法,在费抽象方法中可有具体实现代码。但是接口中只是空的方法体,没有具体实现。

 public abstract class Animal
    {
        protected string a;//普通的数据成员,即字段的定义
        public abstract void move();//抽象方法,子类继承时必须要实现的方法
        public void eat()//非抽象方法,但是必须声明主体,主体可理解为下边大括号中的函数体。
        {
            Console.WriteLine("我是动物,我能吃饭");//非抽象方法中,方法的具体实现
        }
    }
    public interface IAnimal
    {
        //private string a; //接口中不能定义字段。
         void move();  //接口中的方法有且只有抽象方法,不用abstract修饰,
        void eat(); //接口中不能有方法的具体实现。
    }

3·继承关系:

抽象类和子类之间是继承关系,而类和接口是实现关系。一个类只能继承一个抽象类,但是一个类却可以实现多个接口。

接口不能继承抽象类或类,但抽象类可以继承抽象类和类,同时抽象类可以实现接口。

<pre name="code" class="html"> public abstract class Animal
    {
        protected string a;//普通的数据成员,即字段的定义
        public abstract void move();//抽象方法,子类继承时必须要实现的方法
        public void eat()//非抽象方法,但是必须声明主体,主体可理解为下边大括号中的函数体。
        {
            Console.WriteLine("我是动物,我能吃饭");//非抽象方法中,方法的具体实现
        }
    }
    public interface IAnimal
    {
        //private string a; //接口中不能定义字段。
         void move();  //接口中的方法有且只有抽象方法,不用abstract修饰,
        void eat(); //接口中不能有方法的具体实现。
    }
    public interface IAnimal1
    {
        void sleep();
    }
    public class Dog : Animal
    {
        
        public override void move()  //在继承抽象类时,要有override修饰符。
        {
            Console.WriteLine("我是狗,所以我可以跳");
            Console.WriteLine(a);
        }
    }
    public class Cat : IAnimal,IAnimal1   //Cat类可以实现两个接口
    {
        public void move()  //实现接口的方法,不能加override修饰符。
        {
            Console.WriteLine("我是猫,所以我可以跑");
        }

        public void sleep()
        {
            Console.WriteLine("我要睡觉");
        }


        public void eat()
        {
            throw new NotImplementedException();
        }
        public class Pig : Animal, IAnimal1  //猪继承动物,并实现IAnimal1接口,其中Animal和IAniaml1之间用“,”分隔
        {
            public void sleep()
            {
                Console.WriteLine("我是猪,我可以躺着睡觉");
            }

            public override void move()
            {
                Console.WriteLine("我是猪,可以用四条腿走");
            }
        }


 

这仅仅是我个人的理解,有不合理地方,还望多多指教!
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值