Ⅰ.抽象类

1.抽象类、抽象方法

抽象类:通常情况下,它里面有抽象方法,类前面定义了一个abstract

抽象方法:只定义了方法的名称,没有定义方法的内容

2.为什么要使用抽象类、抽象方法?

都是为了继承

3. 怎么去定义抽象类,抽象方法?

abstract +类名,abstract+方法名

   4.特点:

❶.抽象类不能被实例化;

❷.抽象方法的作用是为子类提供一个统一的接口,抽象方面里面只有声明,没有实现;

❸. 一个类一旦继承了一个抽象类,就必须实现对该抽象类里面所有的抽象方法的实现;

public abstract class Person
{
public abstract void A();
public abstract void B();
}

Person

 public class C :Person
{
public override void A()
{
Console.WriteLine("China"); }
public override void B()
{
Console.WriteLine("nihao");
}
public static void Main()
{
C me = new C();
me.A();
}
}

class C :Person

❹.一个抽象类里面可以有非抽象方法,但是一旦一个类里面有抽象方法,该类就为抽象类了;

❺.抽象方法在声明后用一个;结束,不需要用{};

❻.抽象方法在覆写的时候不需要声明为虚方法;

Ⅱ.接口

接口:可以看成一个更加严格意义上的抽象类,当是一个接口的时候,它里面只能是抽象方法,而不能有非抽象方法

1、怎么去定义一个接口?

Interface +类名

2、怎么去定义接口里面的方法?

eg:

void A();

也可以加上参数void A(string name);

注意:千万不能这么写,void B(){};//不能这样写,因为接口里面全部都是只定义了方法名,而没有具体的实现过程

4、特点:

❶.接口用来实现多继承,一个类只能有一个父类,但可以继承于多个接口class A :B,C

(可以是继承这个接口class Animal:Interface1,也可以继承另一一个接口class Animal:Interface1,Interface2)

❷. 接口是一种特殊的抽象类,它里面规定得更严格,里面的方法只能为抽象方法

❸.定义一个接口的时候,一般为缺省,即interface +类名,前面自动加上了public abstract,定义接口中的方法时,也只需要写返回类型 +方法名即可,因为也默认为public abstract

❹.接口里面的所有成员都是公共的

❺.一个类继承与一个接口,就必须完成该接口中所有方法的实现

❻.接口不能包含字段,构造函数,静态变量,或者常量等

5、接口用在什么地方?

接口是多继承,接口的作用相当于一个工厂要生产插座,提供一个模型,模型没有提供实现的具体方法,具体的实现过程,只是定义了一个模型。

6、为什么要使用接口?

就是为了继承,统一规范。

 interface Interface1
{
//接口里面只能用抽象的方法
void A();
void B(string Name);//string Name参数可以写
}

Interface1

 class Animal:Interface1
{
//一个类继承了一个接口,就要去完成接口里面所有的override,必须要override
public override void A()
{ }
public override void B()
{ }
public Animal()
{
Console.WriteLine("我是动物类!");
}
}

Animal:Interface1(继承接口)

 Ⅲ.抽象类和接口有什么区别?

区别:

1.抽象类:有抽象的方法,也有非抽象的方法;

接口:是更加严格意义上的抽象方法,里面必须全部是抽象方法;

2.抽象类:抽象类里面的成员可以是私有的private,公共的public,受保护的protected;

接口:里面所有成员都是公共的public;

共:

1.一个类继承一个抽象类或者一个接口,它必须要override抽象类/接口里面的所有方法。

最新文章

  1. LINQ to SQL语句(2)之Select/Distinct
  2. leetcode总结:permutations, permutations II, next permutation, permutation sequence
  3. httpclient提交json参数
  4. C语言知识整理(1):简介
  5. XXX项目 android 开发笔记
  6. 微软的COM中GUID和UUID、CLSID、IID
  7. java运算符新用法和^新认识
  8. Yii Swiftmailer 发送中文附件
  9. [转] linux之sed用法
  10. HTML特殊符号编码大全
  11. Centos yum 安装mysql报错 No package mysql-server available.
  12. Shiro第六篇【验证码、记住我】
  13. 优化Webpack构建性能的几点建议
  14. 异常笔记--java编程思想
  15. RHM-M10汽车吊力矩限制器/载荷指示器
  16. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
  17. js实现table用鼠标改变td的宽度,固定table宽度和高度超过显示点
  18. ajax--参数映射方式实现阴影效果
  19. java 多线程下载功能
  20. golang web sample

热门文章

  1. 虚拟化平台cloudstack(6)——使用maven:jetty调试
  2. 【重要更新】Senparc.Weixin SDK v4.4 升级说明
  3. Redmined的历史记录显示 "Updated by {{author}} {{age}} ago"
  4. 构造persen
  5. SQL PASS将于8月24日在北京中医药大学举办线下活动
  6. hdu1269迷宫城堡(判断有向图是否是一个强连通图)
  7. Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater原子类
  8. Simptip – 使用 Sass 制作的 CSS Tooltip 效果
  9. $.when(deferreds)
  10. Android之自定义ListView(一)