如何在 Java 中实现数据抽象?

已发表: 2022-05-17

抽象、多态、封装和继承是面向对象编程的四个基本要素。 其中之一,数据抽象,将在下一篇文章中详细讨论。 我们还将学习如何在 Java 中执行数据抽象。

目录

什么是数据抽象?

数据抽象是仅向用户显示最重要的细节的特征。 用户不知道琐碎或非必要的细节。 例如,汽车被视为一个整体,而不是其不同的部分。 在丢弃无关信息的同时仅识别项目所需属性的做法称为数据抽象。

简单来说,数据抽象向用户显示重要项目,同时隐藏无关紧要的元素。

我们使用关键字“abstract”在类和接口的帮助下实现抽象。 我们可以在抽象类中同时拥有抽象方法和具体方法。

什么是抽象类?

在面向对象编程中,抽象类是声明一个或多个抽象方法的类。 抽象类和常规 Java 类之间的唯一区别是抽象类包含 abstract 关键字,而常规 Java 类不包含。 对于抽象类的声明,我们在其类名之前使用 abstract 关键字。 类中可以有抽象方法和具体方法。 但是,抽象方法不能出现在常规类中。 具有至少一个抽象方法的类称为抽象类。

它的语法是:

公共抽象类 Name_of_Class

{

公共抽象 Name_of_Method();

}

实现抽象类的一个例子是:

//抽象类命名

抽象类 DemoClass

{

//抽象方法命名

抽象无效 disp();

}

//继续抽象类

公共类 MainClass 扩展了 DemoClass

{

//定义抽象类的方法体

无效显示()

{

System.out.println(“已调用抽象方法。”);

}

公共静态无效主要(字符串 [] 参数)

{

MainClass obj = new MainClass ();

//调用抽象方法

obj.display();

}

}

逐点列出:

  • 如果一个类至少有一个抽象方法,则必须将其定义为抽象类。
  • 已声明为抽象的类无法实例化。
  • 您必须从另一个类继承一个抽象类并为其抽象方法提供实现以使用它。
  • 如果继承抽象类,则必须为抽象类中的所有抽象方法提供实现。

什么是抽象方法?

抽象方法只有方法声明,没有实现。 抽象方法可以用没有自己的主体的方法来表示。 抽象方法必须仅在抽象类中声明。

如果您希望一个类有一个方法,但该方法的实际实现由子类确定,请将该方法指定为父类中的抽象。

面向对象编程中数据抽象的优势

  • 在面向对象编程中,抽象降低了程序设计的复杂性及其在软件上的实现过程。
  • 在 Java 编程中实现抽象的最大优势在于,用户可以轻松地根据相似性(例如兄弟姐妹)组织类,因此数据的继承和数据的迁移变得容易和可行。
  • 继承是可能的。 例如:

/* 文件名:DemoAbstract.java */

公共类 DemoAbstract {

公共静态无效主要(字符串[]参数){

/* 以下内容无法写入并引发错误 */

员工 e = 新员工(“彼得 D.”,“康涅狄格州哈特福德”,35);

System.out.println(“\n使用Employee引用并调用MailCheck--”);

电子邮件检查();

}

}

这显示以下错误:

Employee.java:46:Employee 是抽象的; 无法实例化

员工 e = 新员工(“彼得 D.”,“康涅狄格州哈特福德”,35);

^

1 个错误

所以我们使用抽象类的用法为:

/* 文件名:employee.java */

公共抽象类员工{

私人字符串 N;

私人字符串添加;

私人整数;

公共雇员(字符串 N,字符串添加,整数){

System.out.println(“构造一个雇员”);

这个.name = N;

this.address = 添加;

this.number = 数字;

}

公共双计算支付(){

System.out.println(“内部员工compute_pay”);

返回 0.0;

}

公共无效邮件检查(){

System.out.println(“邮寄支票到” + this.name + ” ” + this.address);

}

公共字符串 toString() {

返回 N + ” ” + 添加 + ” ” + N ;

}

公共字符串 getName() {

返回 N;

}

公共字符串 getAddress() {

返回添加;

}

公共无效setAddress(字符串新地址){

添加 = 新地址;

}

公共 int getNumber() {

返回号码;

}

}

我们什么时候使用抽象类或抽象方法?

当我们考虑“形状”的一般示例时,我们可以想象它被用于参考计算机辅助设计系统或视频游戏模拟。 这里提到的基本类型是“形状”,每个形状都有自己的颜色属性、大小等。特定的形状类——圆形、正方形、三角形等,都是从它派生(继承)的,每一个可能具有额外的独特属性和行为。 例如,某些形状可以是对称的,而另一些则不是。 形状之间的相似之处和不同之处都体现在类型层次结构中。

因此,形状可以类比为抽象类,而不同类型的形状可以表示为具体类。

这是一个解释抽象类的真实场景:

// 演示抽象的Java程序

抽象类形状 {

字符串颜色;

抽象双区域();

公共抽象字符串 toString();

// 抽象类可以有构造函数

公共形状(字符串颜色)

{

System.out.println(“调用形状构造函数”);

this.color = 颜色;

}

// 这是一个具体的方法

public String getColour() { 返回颜色; }

}

类圆形扩展形状{

双 r;

公共圈(字符串颜色,双(r)

{

// 调用 Shape 构造函数

超级(颜色);

System.out.println(“调用循环构造函数”);

这个.r = r;

}

@Override 双区域()

{

返回 Math.PI * Math.pow(r, 2);

}

@Override public String toString()

{

return “圆圈颜色是” + super.getColor()

+ “和面积是:” + area();

}

}

类矩形扩展形状{

双倍长度;

双倍宽度;

公共矩形(字符串颜色,双倍长度,

双倍宽度)

{

// 调用 Shape 构造函数

超级(颜色);

System.out.println(“调用矩形构造函数”);

this.length = 长度;

this.width = 宽度;

}

@Override double area() { 返回长度 * 宽度; }

@Override public String toString()

{

返回“矩形颜色为” + super.getcolor()

+ “和面积是:” + area();

}

}

公共类测试{

公共静态无效主要(字符串 [] 参数)

{

形状 s1 = new Circle(“红色”, 2.2);

形状 s2 = new Rectangle(“黄色”, 2, 4);

System.out.println(s1.toString());

System.out.println(s2.toString());

}

}

这段代码是这里的代码的修改版本

使用 Java 中的数据抽象的程序的代码片段:

// Java 中的抽象

抽象类 ElecBill

{

//抽象方法

抽象浮动 compBill();

}

Comm 类扩展了 ElecBill

{

浮动 compBill() {

返回 1.00*100;

}

}

国内类扩展了 ElecBill

{

浮动 compBill() {

返回 0.50*75;

}

}

结论

数据抽象是面向对象编程的一个重要方面。 对于像 Java 这样的语言,抽象和其他 OOP 概念(如继承、封装和多态)在编写高效程序方面起着至关重要的作用。

如果您想深入学习 OOP 并获得一流的编程技能,我们建议您参加 upGrad 的软件工程与工作相关的 PG 认证,该认证旨在帮助学生获得 Java、OODAP、DSA、HTML5、CSS3 技能、JavaScript、MERN、AWS、SQL 和 NoSQL 数据库、Spring Boot 等。为期 5 个月的课程涵盖两个专业——MERN 堆栈专业化和云原生专业化,并提供 upGrad 360° 职业咨询课程的访问权限。

从世界顶级大学在线学习软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

什么是多态性? 它与数据抽象有何不同?

多态性是一种概括,类似于数据抽象,但它发生在运行时。 如果有一种机制可以访问一组不同的对象类型,在这些对象类型中它们彼此无法区分,那么它们就是多态的。 因此,即使它们不相同,但其中的所有对象都具有相同的外观和感觉。 目标是大幅减少编码。 您可以编写一个通用解决方案,而不是为每种单独的类型编写所有众多排列。

封装和数据抽象有什么区别?

ENCAPSULATION - 1. 封装隐藏数据(信息),而抽象隐藏细节(​​隐藏实现)。 2. 面向对象编程的抽象解决了设计层面的问题。 3. 出于安全目的,封装意味着隐藏对象如何执行某事的内部信息或机制。 抽象 - 1. 虽然封装将数据和对其进行操作的方法绑定在一起,但数据抽象关注的是暴露用户界面,同时模糊实现细节。 2、通过封装在实现层面解决。 3. 在 Java 中,数据抽象使您可以专注于信息对象必须包含的内容。

接口和抽象类的区别是什么?

接口 - 1. 只有抽象方法发现自己​​是接口的一部分。 2. 支持多重继承。 3. 无法提供抽象类的实现。 4. 接口中只允许使用公共抽象方法。 5、接口中只能使用一个public static final变量。 抽象类 - 1. 抽象以及非抽象方法都可以在抽象类中找到。 2. 不支持多重继承。 3、能够实现接口。 4. 受保护的和抽象的公共方法在抽象类中都是可能的。 5. 使用任何访问说明符,抽象类都可以有 final、static 或 static final 变量。