首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InputStream和OutputStream的子类

InputStream和OutputStream的子类
EN

Stack Overflow用户
提问于 2015-05-01 20:55:11
回答 3查看 1.5K关注 0票数 2

InputStream类和OutputStream类是否都是子类

如果可能的话,我希望能够扩展这两个类。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-01 21:01:53

Java不支持多重继承,因此不能扩展多个类。但是,您可以实现多个接口。

对于您想要做的事情,您希望使用组合而不是继承。因此,您的类将有一个InputStreamOutputStream的实例,您可以根据您想要做的事情将行为委托给每个类。

为什么作曲?继承通常是人们接触到的第一件事,尽管他们想要做的是使用父类的行为。对于多重继承,他们通常希望能够访问两个或多个类的行为。例如,您需要一个类C来执行A类所做的事情,而类B does.From类是一个类型透视图,但是继承是一种“是”关系。如果您说的是SubClass extends ParentClass,您是说SubClass本质上是ParentClass类型的,您可以用SubClass替换ParentClass的实例,您的程序在本质上仍然是正确的。这叫做Liskov代换原理。您可以看到,创建一个同时扩展InputStreamOutputStream的类是一个具有两种行为的类,但严格地说不是其中的一个。您很难用类的一个实例来替换这两个实例,并期望事物“正确”地工作。所以你需要想一想你真正想做的事。如果您不关心您想要扩展的类的内部,但您只是想使用它的行为(或以某种方式改变它的行为),那么您可以维护它的内部实例并委托给它,同时对您需要的行为进行任何更改。

因此,在您的情况下,您想要的是访问两个类的I/O行为。因此,您可以只维护内部实例,然后从您的类中提供一个API,该API委托给两个实例上的适当方法。这里的优点是抽象和封装。任何使用您的类及其API的人都不知道它是如何在内部处理I/O的,而且他们也不需要知道;这是一个实现细节。另外,如果您希望在将来更改内部实现,您可以很容易地做到这一点,因为您的类的唯一接口是通过您的公共API。只要您不修改行为并违反API的约定,就可以任意更改内部实现。

票数 4
EN

Stack Overflow用户

发布于 2015-05-01 20:56:06

InputStreamOutputStream都是类(而不是接口)。Java不支持多重继承,因此不可能直接将它们子类。

但是,通过使用组合,您可以将这两个类的行为放在一个类中。

票数 5
EN

Stack Overflow用户

发布于 2015-05-01 20:58:26

作为Java不支持多重继承,这是不可能的。不能在类中同时继承两个类(InputStream和OutputStream)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29995000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档