Java中的抽象类构造函数
构造函数用于初始化由其名称调用的对象,构造函数的名称与类的名称相同。
抽象类是用abstract关键字声明的,抽象类也有一个构造函数,如果我们在抽象类中没有定义任何构造函数,那么JVM会给我们一个默认的构造函数。
本文介绍如何在 Java 中的抽象类中创建构造函数。
Java中的抽象类构造函数
当我们指出一个类是抽象类时,它不能被实例化,但这并不意味着它不能有构造函数。 抽象类在两种情况下可以有构造函数。
- 当我们想要在子类实例化完成之前对抽象类的字段进行初始化时。
- 当我们在抽象类中定义了final字段,但在声明中没有初始化它们时,可以使用构造函数来初始化这些字段。
如果我们不定义构造函数,JVM 会为我们定义一个默认的构造函数。 在定义构造函数之前,我们必须考虑以下几点。
- 子类构造函数可以调用抽象类中的一个构造函数,如果抽象类中没有参数构造函数,则子类构造函数必须调用该构造函数。
- 所有构造函数都应该在抽象类中定义为 protected,因为将它们定义为 public 没有任何好处。
- 我们还可以定义多个具有不同参数的构造函数。
让我们看一个抽象类构造函数的示例,它将通过使用构造函数扩展抽象类来计算总工资、税收和净工资。
代码示例:
package jiyik;
abstract class SalaryCal {
double salary;
protected SalaryCal() {
salary = 0;
}
protected SalaryCal(double a) {
salary = a;
}
// Calculate is now an abstract method
abstract double Calculate();
}
class Salary extends SalaryCal {
Salary(double a) {
super(a);
}
// override calculate for Salary
double Calculate() {
System.out.println("Inside the Calculate method for Salary.");
double allowance = salary* 0.1; //10 Percent other allowances
return salary + allowance;
}
}
class Tax extends SalaryCal {
Tax(double a) {
super(a);
}
// override calculate for Tax
double Calculate() {
System.out.println("Inside the Calculate method for Tax.");
return salary * 0.2; // 20 percent tax
}
}
public class Abstract_Constructor {
public static void main(String args[]) {
// SalaryCal Demo = new SalaryCal(1000); // illegal now because we can not instantiate an object
double Salary = 1000;
Salary S = new Salary(Salary);
Tax T = new Tax(Salary);
SalaryCal Salary_Calculation; // this is OK, no object is created
//Gross Salary Calculation
Salary_Calculation = S;
double gross_salary = Salary_Calculation.Calculate();
System.out.println("The Gross Salary is " + gross_salary);
//Tax Calculation
Salary_Calculation = T;
double salary_tax = Salary_Calculation.Calculate();
System.out.println("The total Tax on Salary is " + salary_tax);
//Net Salary
double net_salary = gross_salary - salary_tax;
System.out.println("The Net Salary is " + net_salary);
}
}
超类 SalaryCal 被声明为抽象,并具有两个构造函数,一个默认不带参数,另一个带参数。 工资和税收这两个具体类别计算总工资和税收。
抽象构造函数经常用于工资计算。 main方法还演示了我们不能实例化Abstract类。
我们可以使用抽象类从具体类中获取值。
输出:
Inside the Calculate method for Salary.
The Gross Salary is 1100.0
Inside the Calculate method for Tax.
The total Tax on Salary is 200.0
The Net Salary is 900.0
相关文章
多个 JavaScript 构造函数的模式
发布时间:2024/03/21 浏览次数:168 分类:JavaScript
-
本文将教你 JavaScript 中多个构造函数的五种不同模式。这些模式包括参数嗅探、静态方法、函数中的方法、具有默认值的可选参数和单个对象字面量。
C# 中的构造函数链
发布时间:2024/02/02 浏览次数:138 分类:编程语言
-
本教程演示如何使用标准语法在 C# 中进行构造函数链接本教程将演示如何在 C# 中进行构造函数链接。要了解构造函数链,首先必须了解以下概念。
在 C# 中从子类的构造函数调用基类的构造函数
发布时间:2024/02/01 浏览次数:205 分类:编程语言
-
base 关键字可用于从 C# 中的子类的构造函数调用基类的构造函数。本教程将讨论从 C# 中的子类的构造函数调用基类的构造函数的方法。
从 C# 中的另一个构造函数调用构造函数
发布时间:2024/02/01 浏览次数:155 分类:编程语言
-
this 关键字可用于从 C# 中同一类的另一个构造函数调用一个构造函数。本教程将讨论在 C# 中从同一个类的另一个构造函数调用一个构造函数的方法。
在 Java 中调用另一个构造函数
发布时间:2023/11/15 浏览次数:188 分类:Java
-
本教程解释了如何在 Java 中从另一个构造函数中调用一个构造函数。在 Java 中,对象初始化后调用构造函数的顺序称为构造函数链。当我们想通过使用一个实例来调用一个构造函数时,就会用到
在 Java 中重载构造函数
发布时间:2023/11/15 浏览次数:114 分类:Java
-
这篇文章讨论了在 Java 中重载构造函数的方法。本文介绍如何在 Java 中重载构造函数。我们还列出了一些示例代码,你可以遵循这些示例代码以更好地理解该主题。
Java 中的默认构造函数
发布时间:2023/11/15 浏览次数:151 分类:Java
-
本文介绍默认构造函数在 Java 中的工作原理。在 Java 语言中,术语构造函数类似于我们在编程中运行的方法。
Java 空构造函数
发布时间:2023/11/15 浏览次数:179 分类:Java
-
本教程演示什么是 Java 中的空构造函数。当我们需要通过我们的框架反射创建一个新实例时,需要一个空的构造函数。
Java 中的私有构造函数
发布时间:2023/11/15 浏览次数:191 分类:Java
-
本文介绍 Java 中私有构造函数的使用。构造函数是类中最重要的部分之一,因为它是第一个执行的部分,它使我们能够在类中的任何内容之前传递需要初始化的参数。