development

Java의 추상 클래스에 생성자가있는 이유는 무엇입니까?

big-blog 2021. 1. 6. 20:41
반응형

Java의 추상 클래스에 생성자가있는 이유는 무엇입니까?


이 질문에 이미 답변이 있습니다.

abstractJava 클래스에는 constructor?

abstract클래스를 인스턴스화 할 수 없기 때문에 무엇을 구성하고 있습니까?

이견있는 사람?


Java의 생성자는 실제로 객체를 "빌드"하지 않으며 필드를 초기화하는 데 사용됩니다.

추상 클래스에 필드 x 및 y가 있고 실제 구체적인 하위 클래스가 최종적으로 생성 되더라도 항상 특정 방식으로 초기화되기를 원한다고 상상해보십시오. 따라서 생성자를 만들고 이러한 필드를 초기화합니다.

이제 추상 클래스의 두 개의 다른 하위 클래스가있는 경우 인스턴스화 할 때 해당 생성자가 호출되고 부모 생성자가 호출되고 필드가 초기화됩니다.

아무것도하지 않으면 부모의 기본 생성자가 호출됩니다. 그러나 super 키워드를 사용하여 부모 클래스에서 특정 생성자를 호출 할 수 있습니다.


추상 클래스를 포함한 모든 클래스는 생성자를 가질 수 있으며, 구체적인 하위 클래스가 인스턴스화 될 때 추상 클래스 생성자가 호출됩니다.


이에 대한 두 가지 이유 :

1) 추상 클래스가 가지고 constructors있으며 이러한 생성자는 구체적인 하위 클래스가 인스턴스화 될 때 항상 호출됩니다. 우리는 클래스를 인스턴스화 할 때 항상 해당 클래스의 생성자를 사용한다는 것을 알고 있습니다. 이제 모든 생성자는에 대한 암시 적 호출을 사용하여 수퍼 클래스super() 의 생성자를 호출합니다 .

2) 생성자는 클래스의 필드를 초기화하는데도 사용된다는 것을 알고 있습니다. 또한 추상 클래스는 필드를 포함 할 수 있으며 때로는 constructor를 사용하여 어떻게 든 초기화 해야합니다 .


다른 클래스가이를 확장 할 수 있고 자식 클래스가 수퍼 클래스 생성자를 호출해야하기 때문입니다.


추상 클래스에는 상태 (필드)와 일부가 있기 때문에 어떻게 든 초기화해야합니다.


이 질문의 근원은 사람들이 생성자에 대한 호출이 객체를 생성한다고 믿는다는 것입니다. 그것은 사실이 아닙니다. Java는 생성자 호출이 객체를 생성한다고 주장하지 않습니다. 일부 필드를 초기화하는 것과 같이 생성자가 원하는 작업을 수행합니다. 그게 전부입니다. 따라서 추상 클래스의 생성자가 호출된다는 것은 해당 객체가 생성되었음을 의미하지 않습니다.


구현 측면에서는 다음과 같은 하위 클래스 생성자에서 super () 문 내부를 자주 볼 수 있습니다.


public class A extends AbstractB{

  public A(...){
     super(String constructorArgForB, ...);
     ...
  }
}


참조 URL : https://stackoverflow.com/questions/2170500/why-do-abstract-classes-in-java-have-constructors

반응형