什么是抽象类?

Pra*_*are 12 c# java oop

当我了解抽象类时,就说WT(H*)!!!

问题:

  1. 创建一个无法实例化的类有什么意义?
  2. 为什么有人想要这样的课?
  3. 抽象类成为必需的情况是什么?

**如果你明白我的意思*

Mar*_*ell 16

  1. 最常用作基类或接口(某些语言有一个单独的interface构造,有些没有) - 它不知道实现(由子类/实现类提供)
  2. 抽象和重用
  3. 当基类不能为方法提供有意义的默认实现时(但允许子类重用实现的非抽象部分;任何字段,非抽象方法等)

例如:

public abstract class Stream { /* lots of code, some abstract methods */ }
Run Code Online (Sandbox Code Playgroud)

什么是流本身?什么的流?一个文件流?一个网络?内存缓冲区?每个人可能有不同的和不相关的阅读/写作方式,但提供了一个通用的API.它使没有意义的创建只是一个Stream,而是通过abstract类,可以编写StreamAPI不知道的细节:

Stream s = CreateStream(...); // I don't *care* what kind of stream
s.Write(new byte[] {1,2,3,4,5});
s.Close();
Run Code Online (Sandbox Code Playgroud)


Gra*_*rdx 8

Abstract(Base)类为您提供半具体类来实现您的类层次结构.它们允许您做几件事:

  1. 合并常见行为(与仅定义合同的接口不同)
  2. 为函数提供默认(以及可选的可覆盖)实现
  3. 为继承层次结构提供定义明确的分支点
  4. 控制IoC注入点

名单还在继续.


Chi*_*tel 6

抽象类是无法实例化的类。例如,正方形、圆形或矩形是一种形状,可以从类 Shape 派生。

形状将包含正方形、圆形或矩形通用的代码,例如计算形状的面积。但是实例化 Shape 是没有用的,因为它是一个抽象概念,而正方形、圆形和矩形是真实的实体。


Mar*_*arl 5

1)创建一个无法实例化的类有什么意义?

仅仅因为没有直接实例化的东西并不意味着它是有用的.抽象类在继承中起着重要作用,并且在其继承类的类设计中非常有用.

例如,我之前使用过抽象类来定义类必须符合的基本结构.然后我根据该抽象类定义了继承的类,如果我错过了一个必需的方法或其他东西,它可以被编译器选中.

这也允许你做的是将继承的类关联在一起,这意味着你可以假设抽象类中定义的某些方法将存在于继承的类中 - 这可能很有用.

2)为什么有人想要这样的课程

通常我使用它来确保一系列继承的类具有某些方法等.对我来说,它对于设计一组继承类的结构非常有用.

3)抽象类变得必要的情况是什么?

我不认为抽象类是必要的,但在某些情况下使用它可能有用并有助于简化您正在解决的问题.