아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함
상속이란 부모 클래스의 변수와 메서드를 자식 클래스가 물려받는 것임.
extends 키워드를 사용해서 부모 클래스의 기능을 자식 클래스에서 그대로 활용할 수 있는 구조임.
이 방식은 코드 재사용성을 높여주고, 확장이나 유지보수가 용이해지는 장점이 있음.
package C03Inheritance;
public class C01Inheritance extends Parents {
int b = 20;
public static void main(String[] args) {
C01Inheritance c1 = new C01Inheritance();
// 부모클래스 변수 상속
System.out.println(c1.a); // 부모 클래스 변수
System.out.println(c1.b); // 자식 클래스 변수
// 부모클래스 메서드 상속
c1.m1(); // 오버라이딩된 메서드
c1.m2(); // 자식 클래스 고유 메서드
// private은 접근 불가
// c1.c; // 오류 발생
}
@Override
public void m1() {
System.out.println("자식 클래스의 m1임. 오버라이딩함.");
}
public void m2() {
System.out.println("자식 클래스의 m2임.");
}
}
class Parents {
int a = 10; // default 접근제어자 → 같은 패키지 내 접근 가능
private int c = 30; // private → 클래스 내부에서만 접근 가능
public void m1() {
System.out.println("부모 클래스임.");
}
}
extends → 부모 클래스를 상속받을 때 사용하는 키워드임. private은 상속은 되지만 접근 불가능함. | 구분 | 설명 | 특징 |
|---|---|---|
| 오버로딩 | 같은 메서드명을 가지되 매개변수를 다르게 정의 | 컴파일 시점 판별 |
| 오버라이딩 | 부모 메서드를 자식이 재정의 | 런타임 시점 판별 |
@Override 어노테이션을 붙이면, 해당 메서드가 부모로부터 오버라이드된 것임을 명시적으로 알 수 있음.
코드의 안정성과 가독성을 위해 사용하는 것이 좋음.
super는 자식 클래스에서 부모 클래스의 변수나 메서드를 접근할 때 사용하는 키워드임.
자식 클래스와 부모 클래스에 같은 이름의 멤버가 있을 경우 구분용으로 쓰는 것임.
package C03Inheritance;
public class C02SuperKeyword extends SuperParents {
int a = 20;
public static void main(String[] args) {
C02SuperKeyword c = new C02SuperKeyword();
c.display();
}
public void display() {
System.out.println("자식의 변수 a : " + this.a);
System.out.println("부모의 변수 a : " + super.a);
}
public C02SuperKeyword() {
super(10); // 부모 생성자 호출
this.a = 20;
}
}
class SuperParents {
int a = 10;
public SuperParents(int a) {
this.a = a;
}
}
super() → 부모 클래스의 생성자를 호출하는 역할임. this() → 같은 클래스 내의 다른 생성자를 호출할 때 사용함. 자식 객체 생성 시 부모 객체도 함께 생성되지만, 부모 클래스에 기본 생성자가 없는 경우 super(매개변수)를 통해 명시적으로 호출해야 함.
| 키워드 | 설명 |
|---|---|
this | 현재 객체를 참조하는 키워드임. |
super | 부모 객체를 참조하는 키워드임. |
this() | 자신의 생성자를 호출하는 문법임. |
super() | 부모 생성자를 호출하는 문법임. |
@Override는 단순히 꾸며주는 문법이 아니라, 실제로 컴파일러가 오버라이드 여부를 검증해주는 기능임.
Java 기본 문법에서는 꼭 필수는 아니지만, 실무나 스프링(Spring) 환경에서는 매우 중요한 표시 요소가 됨.