欢迎来到百战百胜!我们致力于为广大IT从业者、学生和爱好者提供全面、实用的资源和服务。加入我们的聊天群,这里有专业大佬为你提供有价值的建议和指导!

Java中的抽象类完成了向用户隐藏复杂的代码实现细节的过程,只是向用户提供了必要的信息。这种现象在面向对象编程(Java)中称为数据抽象。

什么是抽象类?

what_is_an_abstract_class

通常,Java中的抽象类是存储我们在程序中使用的数据成员和方法的模板。Java中的抽象使用户看不到复杂的代码实现,并为用户提供了必要的信息。

我们不能在Java中直接实例化抽象类。取而代之的是,我们可以将抽象类作为子类。当我们使用抽象类作为子类时,抽象类方法实现对它的所有父类都是可用的。

接下来,我们将了解Java中的抽象类必须提供的所有突出特性。

抽象类的特点

Java-Abstract_Class_in_Java

Template

Java中的抽象类为开发人员提供了隐藏代码实现的选项,从而实现了执行数据抽象过程的最佳方式。它还为最终用户提供了一个解释所涉及方法的模板。

Loose Coupling

Java中的数据抽象通过在指数级别减少依赖项来实现松散耦合。

Code Reusability

在代码中使用抽象类可以节省时间。我们可以在任何需要抽象方法的地方调用该方法。抽象类避免了再次编写相同代码的过程。

Abstraction

Java中的数据抽象通过将项目的完整特征简化为仅包含必要的组件来帮助开发人员对最终用户隐藏复杂的代码。

Dynamic Resolution

利用动态方法解析的支持,开发人员可以用一个抽象的方法解决多个问题。

在继续之前,让我们首先了解如何声明抽象类。

抽象类的语法

要声明一个抽象类,我们首先使用访问修饰符,然后使用“abstract”关键字,类名如下所示。

//Syntax:

<Access_Modifier> abstract class <Class_Name> {

//Data_Members;

//Statements;

//Methods;

}

抽象类的示例

以下程序是Java中抽象类的几个示例。

//Example 1:
package abstraction;

public abstract class Person {
private String Name;
private String Gender;
public Person(String nm, String Gen) {
this.Name = nm;
this.Gender = Gen;
}

public abstract void work();
@Override
public String toString() {
return "Name=" + this.Name + "::Gender=" + this.Gender;
}

public void changeName(String newName) {
this.Name = newName;
}

public void Exam() {
// TODO Auto-generated method stub
}

public void Office() {
// TODO Auto-generated method stub
}
}

package abstraction;
public class Employee extends Person {
private int EmpId;
public Employee(String EmployeeName, String Gen, int EmployeeID) {
super(EmployeeName, Gen);
this.EmpId = EmployeeID;
}

public void Office() {
if (EmpId == 0) {
System.out.println("Employee Logged Out");
} else {
System.out.println("Employee Logged In");
}
}

public static void main(String args[]) {
Person employee = new Employee("Pavithra", "Female", 1094826);
employee.Office();
employee.changeName("Pavithra Tripathy");
System.out.println(employee.toString());
}

@Override
public void work() {
// TODO Auto-generated method stub
}
}

在声明抽象类时,应该知道一些特定的规则。让我们来详细地探讨一下。

声明抽象类的规则

Rules_to_decalre_an_Abstract_Class_in_Java-Abstract_Class

在Java中使用抽象类时需要遵循的重要规则如下:

  • 在Java中声明抽象类时,关键字“abstract”是必需的。

  • 抽象类不能直接实例化。

  • 抽象类必须至少有一个抽象方法。

  • 抽象类包括最终方法。

  • 抽象类还可以包括非抽象方法。

  • 抽象类可以由构造函数和静态方法组成。

在Java中实现抽象的过程

Ways_of_data_abstraction-Abstract_Class_in_Java.

Java中的数据抽象过程有两种不同的方式。第一种方法显然是使用Java中的抽象类,另一种方法是使用接口。

接口

interface

Java中的接口是方法和实现它的类之间的边界。Java中的接口包含方法签名,但从不包含方法的实现。在Java中,我们使用接口来实现抽象。

//Syntax:
interface <Class_Name>{
//Method_Signatures;
}

//Example:
//Interface
package simplilearn;
public interface Area {
public void Square();
public void Circle();
public void Rectangle();
public void Triangle();
}

//Class
package simplilearn;
import java.util.Scanner;
public class shapeArea implements Area {
public void Circle() {
Scanner kb = new Scanner(System.in);
System.out.println("Enter the radius of the circle");
double r = kb.nextInt();
double areaOfCircle = 3.142 * r * r;
System.out.println("Area of the circle is" + areaOfCircle);
}

@Override
public void Square() {
// TODO Auto-generated method stub
Scanner kb2 = new Scanner(System.in);
System.out.println("Value of the side the square");
double s = kb2.nextInt();
double areaOfSquare = s * s;
System.out.println("Area of the square is" + areaOfSquare);
}

@Override
public void Rectangle() {
// TODO Auto-generated method stub
Scanner kb3 = new Scanner(System.in);
System.out.println("Enter the length of the Rectangle");
double l = kb3.nextInt();
System.out.println("Enter the breadth of the Rectangle");
double b = kb3.nextInt();
double areaOfRectangle = l * b;
System.out.println("Area of the Rectangle is" + areaOfRectangle);
}

@Override
public void Triangle() {
// TODO Auto-generated method stub
Scanner kb4 = new Scanner(System.in);
System.out.println("Enter the base of the Triangle");
double base = kb4.nextInt();
System.out.println("Enter the height of the Triangle");
double h = kb4.nextInt();
double areaOfTriangle = 0.5 * base * h;
System.out.println("Area of the Triangle is" + areaOfTriangle);
}

public static void main(String[] args) {
shapeArea geometry = new shapeArea();
geometry.Circle();
geometry.Square();
geometry.Rectangle();
geometry.Triangle();
}
}

接口VS抽象类

interface/abstract

尽管接口和抽象类在Java中执行类似的数据抽象操作,但它们之间存在一些区别。它们之间的区别如下:

Interface

Abstract Class

使用的关键字: interface

使用的关键字: abstract

子类可以实现接口

子类必须扩展抽象类

可以实现多个接口

可以扩展一个抽象类

支持多重继承

不支持多重继承

既然接口和抽象类之间的区别已经很清楚了,让我们继续前进。下一部分将探讨在Java中使用抽象类时必须考虑的关键优点和缺点

抽象类的优势

  • Java中的抽象类非常有利于编写较短的代码

  • Java中的抽象避免了代码重复

  • 抽象类支持代码的可重用性

  • 对内部代码实现的更改不会影响类

现在,让我们来了解一下在Java中使用抽象类的主要缺点。

抽象类的缺点

  • Java中的抽象代价很高,因为有时您需要处理并不总是必要的情况

  • 对象关系阻抗不匹配,在RDBMS的情况下

  • 对象-关系映射发生在像Hibernate这样的框架中

因此,这些都是Java中抽象类的重要优点和缺点。

至此,我们已经结束了这篇“Java中的抽象类”文章。我们希望您喜欢理解Java中抽象类的基本概念。