C#中抽象类和接口

1.接口定义:

接口中方法多个抽象方法,接口中不负责实现方法,方法由派生类实现,接口用interface表示,例如,定义一个person接口,注意:接口中不能包含实例字段,接口中方法,默认为公共抽象方法;


    internal interface Iperson
    {
        // string Name;  //接口不能包含实例字段
        //string ID;      //接口不能包含实例字段
        void study();     //接口中方法默认为公共抽象方法
    }

定义一个student类,对接口进行实例化,否者会报错,在主函数中实例化stuent类,并打印:

internal class student : Iperson
{
   public void study()   //接口中抽象方法必须在类中实现
    {
        Console.WriteLine($"在努力学习" );
    }
}

main()
{
       student student = new student();
       student.study();
}

打印结果:

在努力学习

2.接口和抽象类的区别

1.抽象类可以包括实例字段,构造函数和方法,但接口不能,
可以理解为,接口是对子类对象的约束,但抽象类是子类的模板,举例,人都需要吃饭,睡觉,学生也不例外,该种方式可以通过抽象类进行,英国王室子女生下来必须进行礼仪学习,这个可以通过接口来实现,相当于对王室子女的约束,既必须要学习礼仪.例如,我们定义一个抽象类,由实例化字段,方法和抽象方法.

 abstract class Person
 {
     public int ID;    //可实例化字段
     public string Name; //可实例化字段
     public void Study()
     {
          console.write(“每个人都要学习”);
     }
     //抽象方法,只进行声明,不进行实现
     public abstract void Having();
 }

2.类只能单继承,但接口可以多继承

一个子类可以继承多个接口,接口中方法不必重载,但只能存在一个父类,一个儿子只有一个父亲,但儿子可以有多种个性习惯;代码展示;

internal interface Iperson   //接口1
{
    void study();
}
internal interface Iman    //接口2
{
    void Excese();

}
internal class student : Iperson, Iman
{
   public void study()   //接口中抽象方法必须在类中实现
    {
        Console.WriteLine($"在努力学习" );
    }
   public void Excese() //接口2方法
    { 
        Console.WriteLine($"男人要锻炼身体");
    }
}

main()
{
 student student = new student();
 student.study();
 student.Excese();
}

输出结果:

在努力学习
男人要锻炼身体

3.单父类和多接口实现

子类只有一个父类,单可以有多个接口,可以通过继承父类和接口满足需求.程序如下;

internal class Human  //父类
{ 

    public string Name; 
    public string Description;
    public void  Live() 
    {
        Console.WriteLine("人首先要活着");
    
    }
}
internal interface Iperson  //接口1
{
     void study();
}
internal interface Iman   //接口2
{
    void Excese();
}

internal class student : Human,Iperson, Iman //子类,继承父类和接口
{
   public void study()   //接口1中抽象方法必须在类中实现
    {
        Console.WriteLine($"在努力学习" );
    }
   public void Excese()// 接口1中抽象方法必须在类中实现
    {
        Console.WriteLine($"男人要锻炼身体");
    }
}

 static void Main(string[] args)     //主函数入口
 {


     student student = new student();
     student.Name = "张三";              //继承父类的字段
     student.Description = "努力的学生"; //继承父类的字段
     Console.WriteLine( $"姓名:{student.Name} 身份:{student.Description}" );
     student.study();                   //接口方法实现
     student.Excese();                  //接口方法实现
}

打印结果:

姓名:张三 身份:努力的学生
在努力学习
男人要锻炼身体

总结:

子类只可以继承一个父类,单可以继承多个接口,接口中本身定义抽象方法名,抽象类相当于子类的一个模板,继承为子类实现方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值