Java中的抽象
Java中的抽象是什么?
抽象是面向对象编程中的一个概念,它“显示”了必要的属性,并“隐藏”了不必要的信息。抽象的主要目的是向用户隐藏不必要的细节。抽象是从更大的数据池中选择数据,只向用户显示对象的相关细节。它有助于降低编程复杂性和工作量。它是OOPs最重要的概念之一。
如果视频无法访问,请点击此处
让我们用例子来学习OOPs中的抽象
假设您要创建一个银行应用程序,并要求您收集有关客户的所有信息。您可能会得出关于客户的以下信息:
但是,并非所有上述信息都用于创建银行应用程序。因此,您需要从该数据池中选择仅对您的银行应用程序有用的信息。诸如姓名、地址、税务信息等数据对银行应用程序有意义,这是OOPs中的一个抽象示例。
由于我们已从较大的池中获取/删除/选择了客户信息,因此该过程在OOPs中称为抽象。但是,一旦提取了相同的信息,就可以对其进行少量修改或不作修改地用于各种应用程序。例如,您可以使用相同的数据用于医院应用程序、求职门户应用程序、政府数据库等。因此,它就成了您的主数据。这是OOPs中抽象的一个优点。
抽象与封装的区别
抽象 | 封装 |
---|---|
面向对象编程中的抽象解决了设计级别的问题。 | 封装解决了实现级别的问题。 |
编程中的抽象是隐藏不必要的细节,同时显示最必要的信息。 | 封装是指将代码和数据绑定到单个单元。 |
Java中的数据抽象允许专注于信息对象应包含的内容。 | 封装是指出于安全原因隐藏对象执行某项操作的内部细节或机制。 |
抽象类与接口的区别
抽象类 | 接口 |
---|---|
抽象类可以同时包含抽象方法和非抽象方法。 | 接口只能包含抽象方法。 |
它不支持多重继承。 | 它支持多重继承。 |
它可以提供接口的实现。 | 它不能提供抽象类的实现。 |
抽象类可以拥有受保护的公共方法和抽象公共方法。 | 接口只能拥有公共抽象方法。 |
抽象类可以拥有final、static或static final变量,并具有任何访问说明符。 | 接口只能拥有公共static final变量。 |
什么是抽象类?
抽象类是Java中的一种类,它声明了一个或多个抽象方法。这些类可以包含抽象方法和具体方法。普通类不能包含抽象方法。抽象类是至少包含一个抽象方法的类。我们可以通过Java中的形状示例来理解这个概念。
考虑以下类层次结构,其中包含一个Shape类,该类被Rectangle、Circle和Triangle三个类继承。Shape类用于保存Rectangle、Circle和Triangle三个类共享的公共属性和方法。calculateArea()是所有三个子类共享并在Shape类中存在的一个方法。
现在,假设您编写代码来创建上面所示类的对象。让我们观察一下这些对象在实际世界中将是什么样子。Rectangle类的对象将生成一个矩形,这是我们在日常生活中经常观察到的形状。
Triangle类的对象将生成一个三角形,这也是一个常见的日常形状。
但是,Shape类的对象在实际世界中会是什么样子??
如果您观察Shape类在我们实现继承和多态的目标时所起的作用。但它并不是为了实例化而构建的。此类可以标记为抽象。抽象的Java类不能被实例化。
语法
abstract class Shape{ // code }
您有可能不将Shape类标记为Abstract然后实例化它。但是这样的对象在您的代码中将没有用处,并且会留下潜在错误的余地。因此,这是不希望的。
Java中的抽象方法是什么?
Java中的抽象方法是没有实现的方法。没有体的方法称为抽象方法。它必须在抽象类中声明。抽象方法永远不会是final,因为抽象类必须实现所有抽象方法。
众所周知,计算矩形、圆形和三角形面积的公式是不同的。calculateArea()方法必须被继承类覆盖。在Shape类中定义它没有意义,但我们需要确保所有继承类都拥有该方法。
这些方法可以标记为抽象。
语法
abstract public void calculateArea();
对于抽象方法,不需要实现。只定义方法的签名。
抽象代码示例
abstract class Shape{ abstract void calculateArea(); } class guru99 extends Shape{ void calculateArea(){System.out.println("Area of Shape");} public static void main(String args[]){ Shape obj = new guru99(); obj.calculateArea(); } }
抽象的优点
- 在编程中使用抽象的主要好处是它允许您将几个相关的类分组为兄弟类。
- 面向对象编程中的抽象有助于降低软件设计和实现过程的复杂性。
Java中的final关键字
final修饰符适用于类、方法和变量。final的含义因上下文而异,但基本思想是相同的。
- final类不能被继承
- final变量成为常量,其值不能被更改。
- final方法不能被重写。这是出于安全原因,并且这些方法用于优化。
示例:- 学习抽象和final关键字
步骤1)将以下代码复制到编辑器中。
abstract class Shape{ final int b = 20; public void display(){ System.out.println("This is display method"); } abstract public void calculateArea(); } public class Rectangle extends Shape{ public static void main(String args[]){ Rectangle obj = new Rectangle(); obj.display(); //obj.b=200; } //public void calculateArea(){} }
步骤2)保存、编译和运行代码。
步骤3)错误=?Rectangle类中未实现抽象方法。要修复该问题,请取消注释第15行。
步骤4)取消注释第13行。保存并编译代码。
步骤5)错误=?变量b是final的
何时使用抽象方法和抽象类?
抽象方法通常在两个或多个子类以不同方式通过不同实现执行相同操作的地方声明。它还扩展了相同的抽象类,并提供了抽象方法的不同实现。
抽象类有助于描述通用类型的行为和面向对象编程类层次结构。它还描述了子类提供抽象类的实现细节。
摘要
- 编程中的抽象是为软件中的对象选择重要数据集并排除不重要数据集的过程。
- 一旦您使用Java中的数据抽象对对象进行了建模,就可以在不同的应用程序中使用相同的数据集。