Java/Spring

Java extends(상속), super

B.OCK 2023. 11. 28. 15:28
반응형

extends (상속) 이란?

상속이란 부모 클래스의 메소드를 그대로 물려받아 오버라이딩할 필요 없이 그대로 사용 가능하도록 하는 기술

상속하는 과정에서 개발된 클래스를 재 사용하여 중복되는 코드를 최대한 줄여주며 부모의 클래스를

오버라이딩 하여 수정할 수 있다.

 

상속을 받더라도 부모 클래스의 모든 것들을 물려받는게 아니다.

필드나 메서드의 접근제어자가 public 또는 protected 일 때만 상속이 가능하다.

 

 

다중상속 불가능

Java 는 다중 상속이 불가능하다.

예를 들어, 상속받은 여러개의 부모 클래스들에서 동일한 이름의 필드나 메서드가 존재할 경우?

  • 어떤 부모 클래스의 필드와 메서드를 상속받을 것인가?
  • 어떤 부모 클래스에 접근할 것인가?

위 처럼 모호함이 발생하여 다중 상속이 불가능하다.

 

 

Java 상속 방법

// 부모 클래스
class 부모 {

}


// 부모 클래스를 상속받은 자식 클래스
class 자식 extends 부모 {

}

 

 

Java 상속 예제

 

부모 클래스
package com.test;

public class Parent {
	public Parent() {
		System.out.println("Extends Test Parent Class Constructor");
	}
	
	public void parent_print() {
		System.out.println("Parent Class Print!!!!!!!!!!!!!");
	}
}

 

부모 클래스를 상속받은 자식 클래스
package com.test;

public class Child extends Parent {
	
	public Child() {
		System.out.println("Extends Test Child Class Constructor");
	}
	
	public void child_print() {
		System.out.println("Child Class Print!!!!!!!!!!!");
	}
}

 

결과
@SpringBootApplication
public class ExtendTestApplication {

	public static void main(String[] args) {
		SpringApplication.run(ExtendTestApplication.class, args);
		
		Child child = new Child();
		child.parent_print();
		child.child_print();
	}

}

 

 

 

  • 자식 객체를 생성하면 무조건 부모 클래스의 생성자까지 호출된다.
  • 상속시에 부모의 멤버 변수, 메소드 등을 사용 가능하다.
  • 부모 클래스의 메서드까지 자식 클래스에서 호출하여 사용할 수 있다.

 

 

super

super 키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용하는 키워드이다.

주로 부모 클래스의 필드, 메서드, 생성자를 호출할 때 사용한다.

 

 

부모 클래스
package com.test;

public class Parent {
	public Parent() {
		System.out.println("Extends Test Parent Class Constructor");
	}
	
	public Parent(String name) {
		System.out.println("Parent Constructor ( "+ name +" )");
	}
	
	public void parent_print() {
		System.out.println("Parent Class Print!!!!!!!!!!!!!");
	}
}

 

부모 클래스는 기본 생성자 및 name 이라는 매개변수를 받는 생성자가 있다.

 

자식 클래스
package com.test;

public class Child extends Parent {
	
	public Child() {
		super("OBO!!!");
		System.out.println("Extends Test Child Class Constructor");
	}
	
	public void child_print() {
		System.out.println("Child Class Print!!!!!!!!!!!");
	}
}

 

자식 클래스에서 super 키워드를 통해 부모 클래스의 String 값을 받는 생성자를 호출한다.

 

결과
package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ExtendTestApplication {

	public static void main(String[] args) {
		SpringApplication.run(ExtendTestApplication.class, args);
		
		Child child = new Child();
		child.parent_print();
		child.child_print();
	}

}

 

 

위 상속 예제에서 봤듯이 자식 클래스의 객체가 생성될 때 자동으로 부모 클래스의 생성자가

실행되는 걸 볼 수 있었다.

 

위 예제처럼 자식 클래스에서 super 키워드를 통해 부모 클래스의 기본 생성자가 아닌

매개변수가 있는 생성자를 호출할 경우 기본 생성자는 호출되지 않는다.

super 키워드를 사용하지 않을 경우 부모 클래스의 기본 생성자를 호출한다.

반응형