Java의 추상 클래스 생성자

Sheeraz Gul 2023년10월12일
Java의 추상 클래스 생성자

생성자는 이름으로 호출되는 객체를 초기화하는 데 사용되며 생성자의 이름은 클래스 이름과 동일합니다.

추상 클래스는 추상 키워드로 선언되고 추상 클래스에도 생성자가 있으며 추상 클래스에 생성자를 정의하지 않으면 JVM이 기본 생성자를 제공합니다.

이 자습서는 Java의 추상 클래스에서 생성자를 만드는 방법을 보여줍니다.

Java의 추상 클래스 생성자

클래스가 추상 클래스라고 표시하면 인스턴스화할 수 없지만 생성자를 가질 수 없다는 의미는 아닙니다. 추상 클래스는 두 가지 조건에서 생성자를 가질 수 있습니다.

  1. 하위 클래스의 인스턴스화가 완료되기 전에 추상 클래스의 필드에 대한 초기화를 수행하려는 경우.
  2. 추상 클래스에서 최종 필드를 정의했지만 선언에서 초기화되지 않은 경우 생성자를 사용하여 이러한 필드를 초기화할 수 있습니다.

생성자를 정의하지 않으면 JVM이 기본 생성자를 정의합니다. 생성자를 정의하기 전에 다음 사항을 고려해야 합니다.

  1. 하위 클래스 생성자는 추상 클래스에서 하나의 생성자를 호출할 수 있으며 추상 클래스에 인수 생성자가 없으면 호출해야 합니다.
  2. 모든 생성자는 public으로 정의하면 이점이 없으므로 추상 클래스에서 보호되도록 정의해야 합니다.
  3. 인수가 다른 하나 이상의 생성자를 정의할 수도 있습니다.

생성자로 추상 클래스를 확장하여 총 급여, 세금 및 순 급여를 계산하는 추상 클래스 생성자에 대한 예를 들어 보겠습니다.

코드 예:

package delftstack;

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은 추상으로 선언되고 두 개의 생성자를 갖습니다. 하나는 기본값인 인수가 없고 다른 하나는 인수가 있습니다. SalaryTax라는 두 개의 구체적인 클래스는 총 급여 및 세금을 계산합니다.

추상 생성자는 급여 계산에 자주 사용됩니다. 또한 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
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

관련 문장 - Java Constructor