迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java中的抽象类构造函数

作者:迹忆客 最近更新:2023/08/10 浏览次数:

构造函数用于初始化由其名称调用的对象,构造函数的名称与类的名称相同。

抽象类是用abstract关键字声明的,抽象类也有一个构造函数,如果我们在抽象类中没有定义任何构造函数,那么JVM会给我们一个默认的构造函数。

本文介绍如何在 Java 中的抽象类中创建构造函数。


Java中的抽象类构造函数

当我们指出一个类是抽象类时,它不能被实例化,但这并不意味着它不能有构造函数。 抽象类在两种情况下可以有构造函数。

  1. 当我们想要在子类实例化完成之前对抽象类的字段进行初始化时。
  2. 当我们在抽象类中定义了final字段,但在声明中没有初始化它们时,可以使用构造函数来初始化这些字段。

如果我们不定义构造函数,JVM 会为我们定义一个默认的构造函数。 在定义构造函数之前,我们必须考虑以下几点。

  1. 子类构造函数可以调用抽象类中的一个构造函数,如果抽象类中没有参数构造函数,则子类构造函数必须调用该构造函数。
  2. 所有构造函数都应该在抽象类中定义为 protected,因为将它们定义为 public 没有任何好处。
  3. 我们还可以定义多个具有不同参数的构造函数。

让我们看一个抽象类构造函数的示例,它将通过使用构造函数扩展抽象类来计算总工资、税收和净工资。

代码示例:

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Kotlin 中继承具有多个构造函数的类

发布时间:2023/05/12 浏览次数:223 分类:Java

本文讨论如何扩展具有多个构造函数的类。 构造函数是在创建对象时调用的函数,用于初始化类变量。在 Kotlin 中扩展具有多个构造函数的类

Kotlin Init 和构造函数之间的区别

发布时间:2023/05/12 浏览次数:176 分类:Java

构造函数和 Kotlin init 块是这种编程语言的重要组成部分。 本文概述了 init 和构造函数之间的区别。

Kotlin 私有构造函数

发布时间:2023/05/12 浏览次数:203 分类:Java

Java 允许通过将其设为私有来隐藏构造函数。 本文讨论如何在 Kotlin 中实现相同的私有构造函数。

PHP 中的构造函数

发布时间:2023/03/29 浏览次数:164 分类:PHP

本文展示了 PHP 构造函数如何初始化在类中创建的对象的属性。

C++ 继承构造函数

发布时间:2023/03/23 浏览次数:91 分类:C++

关于 C++ 中的继承以及我们如何继承构造函数的完整编程教程。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便