Mar*_*ell 16
interface构造,有些没有) - 它不知道实现(由子类/实现类提供)例如:
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)
Abstract(Base)类为您提供半具体类来实现您的类层次结构.它们允许您做几件事:
名单还在继续.
抽象类是无法实例化的类。例如,正方形、圆形或矩形是一种形状,可以从类 Shape 派生。
形状将包含正方形、圆形或矩形通用的代码,例如计算形状的面积。但是实例化 Shape 是没有用的,因为它是一个抽象概念,而正方形、圆形和矩形是真实的实体。
1)创建一个无法实例化的类有什么意义?
仅仅因为没有直接实例化的东西并不意味着它是有用的.抽象类在继承中起着重要作用,并且在其继承类的类设计中非常有用.
例如,我之前使用过抽象类来定义类必须符合的基本结构.然后我根据该抽象类定义了继承的类,如果我错过了一个必需的方法或其他东西,它可以被编译器选中.
这也允许你做的是将继承的类关联在一起,这意味着你可以假设抽象类中定义的某些方法将存在于继承的类中 - 这可能很有用.
2)为什么有人想要这样的课程
通常我使用它来确保一系列继承的类具有某些方法等.对我来说,它对于设计一组继承类的结构非常有用.
3)抽象类变得必要的情况是什么?
我不认为抽象类是必要的,但在某些情况下使用它可能有用并有助于简化您正在解决的问题.