
extends 키워드로 부모 클래스를 확장한다.class Parent {}
class Child extends Parent {}
super())super()는 컴파일러가 자동 추가하여 부모의 기본 생성자를 호출한다.super(매개값)을 직접 호출해야 한다.class Parent {
Parent(String msg) {
System.out.println("부모 생성자: " + msg);
}
}
class Child extends Parent {
Child() {
super("Hello"); // 명시적으로 부모 생성자 호출
System.out.println("자식 생성자");
}
}
public → private 불가)super.method()로 부모 메소드를 호출할 수 있다.class Parent {
void display() {
System.out.println("부모 출력");
}
}
class Child extends Parent {
@Override
void display() {
super.display(); // 부모 메소드 호출
System.out.println("자식 출력");
}
}
final은 수정 불가 의미를 가진다.final 클래스 → 상속 불가
final class A {}
// class B extends A {} // 오류 발생
final 메소드 → 오버라이딩 불가
class Parent {
final void show() {}
}
class Child extends Parent {
// void show() {} // 오류
}
default처럼 접근 가능.package p1;
public class A {
protected void method() {}
}
package p2;
import p1.A;
class B extends A {
void call() { super.method(); } // 가능
}
Parent p = new Child(); // 자동 타입 변환
p.method(); // 자식 메소드 실행
Parent p = new Child();
Child c = (Child) p; // 가능
class Car {
Tire tire;
}
car.tire = new HankookTire();
car.tire = new KumhoTire(); // 다른 객체로 교체 가능
void drive(Car car) {
car.run();
}
drive(new Bus()); // Bus의 run() 실행
drive(new Taxi()); // Taxi의 run() 실행
instanceof 연산자로 객체 타입을 확인할 수 있다.if (obj instanceof Child) {
Child c = (Child) obj;
}
new로 직접 객체 생성 불가, 반드시 상속 후 사용해야 한다.abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
void sound() { System.out.println("멍멍"); }
}
permits 키워드로 상속 가능한 클래스를 지정해야 한다.public sealed class Person permits Employee, Manager {}
public final class Employee extends Person {}
public non-sealed class Manager extends Person {}
extends로 단일 상속만 가능super()로 부모 생성자 호출super.method() 활용final, protected, 타입 변환, 다형성 원리