YUYANE

JAVA / 상속 - 생성자 본문

Programming Languages/JAVA

JAVA / 상속 - 생성자

YUYA 2020. 10. 1. 10:07

1. 기본 개념(Inheritance)

- 일반적으로 '유산을 상속받다'라는 말에서 처럼 자바에서는 자식 클래스가 부모 클래스의 멤버(변수)들을 상속 받고자 하는 개념으로 사용된다.

- 코드

class Parent { }

class Child extends Parent { }

- 자식 클래스는 본인이 지닌 변수들 이외에 부모 클래스의 변수들까지 포함한다. 

   자식 클래스 변수 갯수 >= 부모 클래스 변수 갯수 

 

2. 주의사항

- 부모 클래스에서 private으로 선언 된 변수는 상속되지 않음

- 다중 상속 x, 단일 상속만 허용

 

3. 상속을 사용하는 이점

- 부모 클래스의 멤버들을 자식 클래스에서 따로 선언할 필요 없이 멤버를 사용할 수 있기 때문에, 시간적인 측면에서 효율적이다.

 

4. 상속에 있어서의 생성자

- 생성자와 초기화 블럭은 상속 되지 않고, 멤버만 상속되지만, 자식 클래스에서 인스턴스를 생성할 때, 부모 클래스의 기본 생성자를 자동 호출한다.

  - 자식 객체를 생성하면, 부모 객체를 먼저 생성한 후 자식 객체가 그 다음에 생성된다. 코드상에서 구현은 되어있지 않음.

//부모 클래스
public class Coffee {

	String beans;
	String flavor;
	
	public Coffee() {
		System.out.println("커피 원두 마다 다른 맛이 난다.");
	}
	
	public void Print() {
		System.out.println("커피 원두와 맛 : " + beans + flavor);
	}

}

//자식 클래스
public class Cafe extends Coffee{
   String name;
   
   public Cafe(String name) {
	   System.out.println(name+"커피는 맛있다.");
   }
   
   public static void main(String[] args) {
	   Cafe 카페 = new Cafe("별다방");
   }
}

 

 

- 자식 클래스에 default 생성자가 있으면 그 생성자에는 부모클래스의 생성자(super()) 호출이 compile시 자동 삽입된다. (코드 상에는 없지만, 내부적으로 부모 객체 생성 후에 자식 객체가 생성된다.)

//부모 클래스
public class Coffee {

	String beans;
	String flavor;
	
	// 명시적인 생성자가 없다. 이 경우에 컴파일러가 알아서 기본 생성자를 생성하여 호출한다.
    
   
	public void Print() {
		System.out.println("골목에 있는 카페의 원두와 맛 : " + beans + flavor);
	}

}


//자식 클래스
public class Cafe extends Coffee{
  
   // 명시적 생성자
   public Cafe(String beans, String flavor) {
     //자식 클래스 생성자 선언 맨 첫줄에 컴파일러에 의해부모 클래스의 생성자 super();가 선언된다.
	 //만약에 부모 클래스에 명시적 생성자 선언이 있다면 자식 크래스 내부 첫줄에 직접 super(매개값, 매개값...);과 같이 선언해주어야 한다.
     //컴파일러는 기본 생성자만 담당하기 때문이다.
    this.beans = beans;
	this.flavor = flavor;
	 
   }
   
   public static void main(String[] args) {
	   Cafe cafe = new Cafe("고소한 원두","고소한 맛");
	   cafe.Print();
   }
}

 

 

 

 

** 참고 사이트

https://roughexistence.tistory.com/141 

 

JAVA - 개발자가 놓치기 쉬운 자바의 개념, 기본원리

JAVA를 배우는 사람, 또는 프로그래밍에 종사하시는 개발자 분들이 다시한번 봐도 괜찮을거 같은 마치 이론 시험 직전 보는 컨닝페이퍼 같이 정리 되어있는 자바의 기본원리 에 관한 자료입니다.

roughexistence.tistory.com

m.blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220961980579&proxyReferer=https:%2F%2Fwww.google.com%2F

chanhuiseok.github.io/posts/java-1/

** 참고 문헌

자바의 정석 (남궁 성 지음)

 

 

**초보 개발자가 정리한 글입니다. 혹시 잘못된 정보 발견하시면 댓글로 알려주세요! 감사합니다.

Comments