知识回顾:抽象类与抽象方法

简介: 知识回顾:抽象类与抽象方法

今天说一个老生常谈的知识:抽象类与抽象方法。这两个内容在面试中经常被问到,对于老程序员来说会打起来没什么难度,但是对于新手程序员来说就有些难多了,那么这篇文章就来讲解一下抽象类和抽象方法。


C#允许把类和方法声明为抽象类与抽象方法,声明方法是在类名或方法名前加上 abstract 关键字。定义很简单,但是你有没有想过什么时候应该用抽象类呢?要回答这个问题只需记住一点:如果类设计的目点是用来被其它类继承,并且它代表的是一系列类对象所具有的公共属性或方法,那么这个类应该设置为抽象类。


下面我们再来看另一个问题:抽象类与普通类有什么区别。首先抽象类不能够被实例化。如果类中包含有抽象方法,那么这个类必须要声明为抽象类。同时抽象方法必须在子类中重写。例如我们要声明一个用户类User,这个类里定义了公用的方法,然后有其它类来继承它并实现自己的方法,那么这个用户类应该声明为抽象类。因为User是一个名词不代表具体的对象,只是代表所有用户所拥有的共同特征,因此User类不可能被实例化。同时如果所有用户都必须声明Login方法的话,那么可以在User类中声明一个抽象方法Login,让所有继承自User的类都去重写Login方法。案例代码如下:

//声明抽象类User
abstract class User 
{
  //声明抽象方法Login,所有继承User类的子类都必须重写Login()方法
  protected abstract void Login(); 
}
//声明Emplyee类,继承自User类
class Emplyee:User
{
  protected override vod Login()
  {
    //more code
  }
}

抽象类和接口好多人会弄混,下面我们就来看看接口和抽象类的区别。


1.接口

接口是指对协定进行定义的引用类型,其他类型实现接口以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似接口可以包含方法、属性、索引器和事件作为成员。以下是接口的定义:


  • 接口是为了实现多态;
  • 接口只能包含方法、属性、事件、索引;
  • 接口成员不能有任何实现;
  • 接口不能被实例化;
  • 接口成员不能有访问修饰符,默认为public;
  • 实现接口的子类必须实现接口所有成员函数;
  • 子类实现接口方法时不需要任何关键字,直接实现即可。


2.抽象类

在面向对象过程中所有的对象都是类描绘的,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类,下面是抽象类的定义:


  • 抽象方法只能出现在抽象类中,但是抽象类中可以包含普通方法;
  • 抽象类不能实例化;
  • 抽象类与抽象方法需要添加abstract关键字;
  • 子类实现父类的抽象方法时需添加override关键字;
  • 如果抽象类的子类不是抽象类,那么子类中必须重写父类抽象类的所有抽象方法。


3.抽象类和接口异同


不能实例化、包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。


接口可以多继承,抽象类不能实现多继承、接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员、接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念、接口支持回调,抽象类不能实现回调、接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法、接口可以作用于值类型和引用类型,抽象类只能作用于引用类型、抽象类主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能、接口着重于Can-Do关系类型,抽象类则偏重于IS-A式关系、接口定义对象的行为,抽象类定义对象的属性、如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类、接口对应的是面向对象编程思想的重要原则:面向接口编程。


目录
相关文章
|
2月前
抽象类
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
15 0
|
2天前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
6 0
|
15天前
|
存储
抽象类为什么有抽象方法?
抽象类为什么有抽象方法?
|
2月前
3.抽象类
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
11 0
|
2月前
抽象方法
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
34 8
|
9月前
|
Java 编译器
认识抽象类
认识抽象类
50 0
|
Java Maven 开发工具
idea导入项目不显示右侧maven的解决办法
idea导入项目不显示右侧maven的解决办法
1038 0
idea导入项目不显示右侧maven的解决办法
|
Windows
关于windows杀死某个端口号进程的方法
关于windows杀死某个端口号进程的方法
636 0
关于windows杀死某个端口号进程的方法
抽象类和抽象方法
抽象方法abstract public void Func();声明了abstract 不能有函数体 声明了virtual可以有函数体
507 0