抽象类:-实时示例
最近在一次采访中,我被问到一个非常笼统的问题“Java中什么是抽象的”。我给出了定义,然后是关于抽象的其他一些问题,如什么是抽象方法以及抽象方法和具体方法之间的区别等等。最后,面试官要求我给出一个实时的例子,当我应该使用或定义一个类作为抽象时。我感到困惑。我举了一些例子,但他不相信。
我用谷歌搜索了它,但没有找到真正的解决方案。
那么有人可以给我一个实时的例子,即他什么时候在他/她的项目中将一个类定义为抽象的,为什么?
谢谢。
最近在一次采访中,我被问到一个非常笼统的问题“Java中什么是抽象的”。我给出了定义,然后是关于抽象的其他一些问题,如什么是抽象方法以及抽象方法和具体方法之间的区别等等。最后,面试官要求我给出一个实时的例子,当我应该使用或定义一个类作为抽象时。我感到困惑。我举了一些例子,但他不相信。
我用谷歌搜索了它,但没有找到真正的解决方案。
那么有人可以给我一个实时的例子,即他什么时候在他/她的项目中将一个类定义为抽象的,为什么?
谢谢。
从这里找到实时的一个很好的例子:-
抽象类的一个具体示例是一个名为 Animal 的类。你在现实生活中看到很多动物,但只有动物的种类。也就是说,你永远不会看着紫色和毛茸茸的东西,然后说“那是一种动物,没有更具体的方式来定义它”。相反,你看到一只狗,一只猫或一头猪...所有动物。关键是,你永远看不到一只动物走来走去,而不是更具体的东西(鸭子,猪等)。动物是抽象类,鸭子/猪/猫都是从该基类派生的类。动物可能会提供一种称为“年龄”的功能,为动物增加1年的生命。它还可能提供一种名为“IsDead”的抽象方法,当调用该方法时,它会告诉您动物是否已死亡。由于IsDead是抽象的,因此每个动物都必须实现它。因此,猫可能会在14岁后决定它已经死亡,但鸭子可能会在5岁后决定死亡。抽象类 Animal 为从它派生的所有类提供 Age 函数,但每个类都必须自己实现 IsDead。
一个商业例子:
我有一个持久化引擎,可以对抗任何数据源(XML,ASCII(分隔和固定长度),各种JDBC源(Oracle,SQL,ODBC等)。我创建了一个基本的抽象类来提供此持久性中的通用功能,但在持久化对象时实例化了相应的“Port”(子类)。(这使得开发新的“Ports”变得更加容易,因为大部分工作都是在超类中完成的;特别是各种JDBC;因为我不仅做持久化,还做其他事情(如表生成),所以我必须为每个数据库提供各种差异。接口的最佳业务示例是集合。我可以使用java.util.List,而不用关心它是如何实现的;将 List 作为抽象类是没有意义的,因为与 LinkedList 相比,数组列表的工作方式存在根本差异。同样,映射和设置。如果我只是在处理一组对象,而不关心它是列表、地图还是集,我只能使用“集合”界面。
在这里,关于抽象类的东西...
实时示例--
如果你想制造一辆新车(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
}
}