抽象类:-实时示例

2022-09-01 11:57:49

最近在一次采访中,我被问到一个非常笼统的问题“Java中什么是抽象的”。我给出了定义,然后是关于抽象的其他一些问题,如什么是抽象方法以及抽象方法和具体方法之间的区别等等。最后,面试官要求我给出一个实时的例子,当我应该使用或定义一个类作为抽象时。我感到困惑。我举了一些例子,但他不相信。

我用谷歌搜索了它,但没有找到真正的解决方案。

那么有人可以给我一个实时的例子,即他什么时候在他/她的项目中将一个类定义为抽象的,为什么?

谢谢。


答案 1

从这里找到实时的一个很好的例子:-

抽象类的一个具体示例是一个名为 Animal 的类。你在现实生活中看到很多动物,但只有动物的种类。也就是说,你永远不会看着紫色和毛茸茸的东西,然后说“那是一种动物,没有更具体的方式来定义它”。相反,你看到一只狗,一只猫或一头猪...所有动物。关键是,你永远看不到一只动物走来走去,而不是更具体的东西(鸭子,猪等)。动物是抽象类,鸭子/猪/猫都是从该基类派生的类。动物可能会提供一种称为“年龄”的功能,为动物增加1年的生命。它还可能提供一种名为“IsDead”的抽象方法,当调用该方法时,它会告诉您动物是否已死亡。由于IsDead是抽象的,因此每个动物都必须实现它。因此,猫可能会在14岁后决定它已经死亡,但鸭子可能会在5岁后决定死亡。抽象类 Animal 为从它派生的所有类提供 Age 函数,但每个类都必须自己实现 IsDead。

一个商业例子

我有一个持久化引擎,可以对抗任何数据源(XML,ASCII(分隔和固定长度),各种JDBC源(Oracle,SQL,ODBC等)。我创建了一个基本的抽象类来提供此持久性中的通用功能,但在持久化对象时实例化了相应的“Port”(子类)。(这使得开发新的“Ports”变得更加容易,因为大部分工作都是在超类中完成的;特别是各种JDBC;因为我不仅做持久化,还做其他事情(如表生成),所以我必须为每个数据库提供各种差异。接口的最佳业务示例是集合。我可以使用java.util.List,而不用关心它是如何实现的;将 List 作为抽象类是没有意义的,因为与 LinkedList 相比,数组列表的工作方式存在根本差异。同样,映射和设置。如果我只是在处理一组对象,而不关心它是列表、地图还是集,我只能使用“集合”界面。


答案 2

在这里,关于抽象类的东西...

  1. 抽象类是一个不完整的类,因此我们无法实例化它。
  2. 如果方法是抽象的,则类必须是抽象的。
  3. 在抽象类中,我们同时使用抽象和具体方法。
  4. 定义一个类抽象和最终两者都是非法的。

实时示例--

如果你想制造一辆新车(WagonX),其中包括了另一辆车的所有属性,如颜色,尺寸,发动机等,并且你想在你的车中添加一些其他功能,如模型,baseEngine。然后,只需创建一个抽象类 WagonX,您可以在其中将所有预定义的功能用作抽象,而另一个功能是具体的,由您定义。
另一个扩展抽象类 WagonX 的子类,默认情况下它还访问在抽象类中实例化的抽象方法。子类还通过创建子类的对象来访问具体方法。
为了代码的可重用性,开发人员主要使用抽象类。

abstract class WagonX
{
   public abstract void model();
   public abstract void color();
   public static void baseEngine()
    {
     // your logic here
    }
   public static void size()
   {
   // logic here
   }
}
class Car extends WagonX
{
public void model()
{
// logic here
}
public void color()
{
// logic here
}
}