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
相关文章
在 Kotlin 中继承具有多个构造函数的类
发布时间:2023/05/12 浏览次数:223 分类:Java
-
本文讨论如何扩展具有多个构造函数的类。 构造函数是在创建对象时调用的函数,用于初始化类变量。在 Kotlin 中扩展具有多个构造函数的类
Kotlin Init 和构造函数之间的区别
发布时间:2023/05/12 浏览次数:176 分类:Java
-
构造函数和 Kotlin init 块是这种编程语言的重要组成部分。 本文概述了 init 和构造函数之间的区别。