extends 키워드를 사용해서 상속관계를 구현한다.✅ 상속의 첫 번째 장점 - 재사용성
public class Parent {
public String familyName = "스파르탄";
public int honor = 10;
public void introduceFamily() {
System.out.println("우리 " + this.familyName + " 가문은 대대로 명성을 이어온...");
}
}
class Child extends Parent { // ✅ extends 키워드 활용
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
System.out.println(child.honor); // ✅ 부모의 속성을 물려받아 사용
System.out.println(child.familyName); // ✅ 부모의 속성을 물려받아 사용
child.introduceFamily(); // ✅ 부모의 메서드를 물려받아 사용
}
}
public class Child extends Parent {
private String familyName = "gim"
public void superExample() {
System.out.println("우리 " + this.familyName + " 가문은 ...");
System.out.println("원래 가문의 이름은 " + super.familyName);
}
}
super()는 항상 생성자의 첫 줄에 위치해야 한다.public class Child extends Parent {
...
public Child() {
super(); // ✅ (1)부모클래스 생성자를 먼저 호출
// 추가로직은 여기에 작성
}
}
public class Parent {
public Parent() {} // ✅ 부모 생성자
}
✅ 상속의 두 번째 장점 - 확장
public class Child extends Parent {
...
// ✅ 부모에는 없지만 자식에만 있는 기능
public void showSocialMedia() {
System.out.println("우리 가문은 이제 SNS도 합니다. 팔로우 부탁드려요!");
}
}
public class Main {
public static void main(String[] args) {
...
child.showSocialMedia(); // ✅ 부모에는 없지만 자식에만 있는 기능
}
}
✅ 오버라이딩을 통해 부모클래스의 기능을 재정의할 수 있다.
@Override 키워드를 붙이는 것을 권장한다.@Override 를 붙이면 컴파일러가 부모 클래스에 동일한 메서드가 없다고 경고를 줘서 실수를 방지할 수 있다.public class Parent {
// 기존 기능
public void introduceFamily() {
System.out.println("우리 " + familyName + " 가문은 대대로 명성을 이어온 가문입니다.");
}
}
class Child extends Parent {
...
@Override
void introduceFamily() { // ✅ 자식클래스에서 재정의
System.out.println("오버라이드");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.introduceFamily(); // 출력 "오버라이드"
}
}
abstract 키워드로 클래스를 선언하면 추상클래스이다.abstract 키워드로 메서드를 선언하면 자식클래스에서 강제로 구현해야한다.abstract class Animal {
private String name; // ✅ 변수선언가능
abstract void eat(); // ⚠️ 추상메서드: 상속 받은 자식은 강제 구현해야합니다.
public void sleep() { // ✅ 자식클래스에서 재사용가능합니다.
System.out.println("쿨쿨");
}
}
public class Cat extends Animal {
@Override
void eat() {
System.out.println("냠냠"); // ⚠️ 자식클래스에서 강제 구현해야합니다.
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal(); // ❌ 추상클래스는 구현할 수 없습니다.
Cat cat = new Cat();
cat.eat(); // ⚠️ 강제 구현한 메서드 사용
cat.sleep(); // ✅ 부모클래스의 매서드 사용
}
}