HOWTO · Java
Java의 추상 클래스 생성자
이 자습서는 Java에서 추상 클래스 생성자를 만드는 방법을 보여줍니다.
이 페이지의 내용
생성자는 이름으로 호출되는 객체를 초기화하는 데 사용되며 생성자의 이름은 클래스 이름과 동일합니다.
추상 클래스는 추상 키워드로 선언되고 추상 클래스에도 생성자가 있으며 추상 클래스에 생성자를 정의하지 않으면 JVM이 기본 생성자를 제공합니다.
이 자습서는 Java의 추상 클래스에서 생성자를 만드는 방법을 보여줍니다.
Java의 추상 클래스 생성자
클래스가 추상 클래스라고 표시하면 인스턴스화할 수 없지만 생성자를 가질 수 없다는 의미는 아닙니다. 추상 클래스는 두 가지 조건에서 생성자를 가질 수 있습니다.
- 하위 클래스의 인스턴스화가 완료되기 전에 추상 클래스의 필드에 대한 초기화를 수행하려는 경우.
- 추상 클래스에서 최종 필드를 정의했지만 선언에서 초기화되지 않은 경우 생성자를 사용하여 이러한 필드를 초기화할 수 있습니다.
생성자를 정의하지 않으면 JVM이 기본 생성자를 정의합니다. 생성자를 정의하기 전에 다음 사항을 고려해야 합니다.
- 하위 클래스 생성자는 추상 클래스에서 하나의 생성자를 호출할 수 있으며 추상 클래스에 인수 생성자가 없으면 호출해야 합니다.
- 모든 생성자는 public으로 정의하면 이점이 없으므로 추상 클래스에서 보호되도록 정의해야 합니다.
- 인수가 다른 하나 이상의 생성자를 정의할 수도 있습니다.
생성자로 추상 클래스를 확장하여 총 급여, 세금 및 순 급여를 계산하는 추상 클래스 생성자에 대한 예를 들어 보겠습니다.
코드 예:
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은 추상으로 선언되고 두 개의 생성자를 갖습니다. 하나는 기본값인 인수가 없고 다른 하나는 인수가 있습니다. Salary 및 Tax라는 두 개의 구체적인 클래스는 총 급여 및 세금을 계산합니다.
추상 생성자는 급여 계산에 자주 사용됩니다. 또한 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