Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 추상 클래스에 생성자가 있는 반면 인터페이스에는 생성자가 없는 이유는 무엇입니까?

<시간/>

생성자 객체와 관련하여 특정 클래스의 비정적 멤버를 초기화하는 것입니다.

인터페이스의 생성자

  • 인터페이스 Java에는 생성자 가 없습니다. 인터페이스의 모든 데이터 멤버가 공개 정적 최종 이기 때문입니다. 기본적으로 상수입니다(선언 시 값 할당).
  • 인터페이스에 생성자를 통해 초기화할 데이터 멤버가 없습니다.
  • 메소드를 호출하려면 객체가 필요합니다. 인터페이스의 메서드에는 본문이 없기 때문에 인터페이스에서 메서드를 호출할 필요가 없습니다.
  • 인터페이스에서 메소드를 호출할 수 없기 때문에 인터페이스에 대한 객체를 생성할 필요도 없고 생성자가 있을 필요도 없습니다.

예시 1

interface Addition {
   int add(int i, int j);
}
public class Test implements Addition {
   public int add(int i, int j) {
      int k = i+j;
      return k;
   }
   public static void main(String args[]) {
      Test t = new Test();
      System.out.println("k value is:" + t.add(10,20));
   }
}

출력

k value is:30

클래스의 생성자

  • 생성자 의 목적 클래스 에서 필드를 초기화하는 데 사용되지만 개체를 ​​빌드하는 데는 사용되지 않습니다.
  • 추상 슈퍼클래스의 새 인스턴스를 만들려고 하면 컴파일러에서 오류가 발생합니다.
  • 그러나 추상 클래스를 상속하고 변수를 설정하여 생성자를 사용할 수 있습니다.

예시 2

abstract class Employee {
   public String empName;
   abstract double calcSalary();
   Employee(String name) {
      this.empName = name; // Constructor of abstract class  
   }
}
class Manager extends Employee {
   Manager(String name) {
      super(name); // setting the name in the constructor of subclass
   }
   double calcSalary() {
      return 50000;
   }
}
public class Test {
   public static void main(String args[]) {
      Employee e = new Manager("Adithya");
      System.out.println("Manager Name is:" + e.empName);
      System.out.println("Salary is:" + e.calcSalary());
   }
}

출력

Manager Name is:Adithya
Salary is:50000.0