상속이란 부모 클래스의 메소드를 그대로 물려받아 오버라이딩할 필요 없이 그대로 사용 가능하도록 하는 기술
상속하는 과정에서 개발된 클래스를 재 사용하여 중복되는 코드를 최대한 줄여주며 부모의 클래스를
오버라이딩 하여 수정할 수 있다.
상속을 받더라도 부모 클래스의 모든 것들을 물려받는게 아니다.
필드나 메서드의 접근제어자가 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();
}
}