Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将超类作为抽象类的目的_Java_Oop_Inheritance_Abstract Class_Superclass - Fatal编程技术网

在Java中将超类作为抽象类的目的

在Java中将超类作为抽象类的目的,java,oop,inheritance,abstract-class,superclass,Java,Oop,Inheritance,Abstract Class,Superclass,作为抽象类的超类为其所有子类强制定义其抽象方法带来了开销。我知道这是非常基本的,但我需要知道为什么程序员通常将超级类作为抽象类,尽管我们可以使用超级类作为非抽象类来做类似的事情。抽象主要用于设计模式,我建议您阅读以下内容: 假设您有一个常见的行为,其中只有实现特定的小细节-然后您可以将所有常见的行为放在一个抽象基类中,并拥有一些实现类需要填充的抽象方法 例如,抽象存储库基类可能实现与服务器联系的所有详细信息等,而具体存储库只需填写详细信息即可从正确的表中读取正确的对象等。抽象超类是提供可重用代

作为抽象类的超类为其所有子类强制定义其抽象方法带来了开销。我知道这是非常基本的,但我需要知道为什么程序员通常将超级类作为抽象类,尽管我们可以使用超级类作为非抽象类来做类似的事情。

抽象主要用于设计模式,我建议您阅读以下内容:


假设您有一个常见的行为,其中只有实现特定的小细节-然后您可以将所有常见的行为放在一个抽象基类中,并拥有一些实现类需要填充的抽象方法


例如,抽象存储库基类可能实现与服务器联系的所有详细信息等,而具体存储库只需填写详细信息即可从正确的表中读取正确的对象等。

抽象超类是提供可重用代码的一种方法

  • 您可以扩展抽象类并继承代码。这有时比使用静态方法或对象组合来共享代码更方便

  • 抽象类可以“修复”部分代码(通过使其成为最终代码)。这被称为“模板方法”模式(对于无法提供最终方法的接口,这是不可能的)

当然,您也可以使用非抽象超类来实现这两个目标

抽象类还有一个额外的好处,即它不必提供完整的实现(自行实例化是有意义的),某些部分可以保留指定,但没有实现(抽象方法)

Abstract类用于“抽象”。也就是说,如果某些类有共同的行为,不要每次在每个类中编写相同的内容,而是在一个类中编写,并要求其他类使用它[通过将类作为抽象类的子类]。这只是继承总结:当需要某些类的默认行为时使用抽象类当需要不同类的不同行为时使用接口。

有关更多说明,请参阅以下链接:

http://www.javacoffeebreak.com/faq/faq0084.html

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

抽象类的几种用法:

  • 在对象之间传输数据时充当协议,两个客户不需要知道其他类的结构。---就像界面一样

  • 定义抽象操作,它隐藏了具体类的详细实现,例如,我有一个名为AbstractPayment的类,它定义了向客户收费的操作,那么它的具体类可以是:PaypalPayment、AlipayPayment、BankPayment和其他。但是,对于类customer,它只需要知道抽象付款。 一段时间后,如果您需要添加其他付款,或修改其他付款,则customer类不会更改


  • 我也可以用接口实现同样的功能。接口不包含实现(至少直到最近…)。你不能在界面中用最后的方法“修复”部分。你能给现实世界中两个抽象类和接口的例子吗?+ 1我不认为“模板方法”是使用抽象类的好处之一。谢谢!你能给出抽象类和接口的真实例子吗?抽象类和接口都是不同的。我想你知道这件事。抽象类可以有普通的方法,而接口只能有抽象的方法。抽象类方法用于数据抽象,在这种抽象中,您只能知道此方法将执行的操作,但无法知道该方法背后的逻辑。如果你有抽象方法private abstract ab(),那么另一个开发人员可以根据他/她的要求调用ab(),但该开发人员看不到该方法背后的真实逻辑。我只想用一个真实世界的例子让两者都能很好地理解。你能给出抽象类和接口的真实世界的例子吗?