명품 자바 프로그래밍

[명품 자바 프로그래밍] 5장 상속 정리

n_0_jun 2024. 10. 21. 14:00
반응형

1. 상속 (Inheritance)

  • 정의: 상속은 기존 클래스를 재활용하여 새로운 클래스를 만드는 기능으로, 부모 클래스의 속성과 메소드를 자식 클래스가 물려받는 것을 의미합니다.
  • 구문:
     
public class Person {
    // Person 클래스의 멤버 변수 및 메소드
}

public class Student extends Person {
    // Student 클래스의 멤버 변수 및 메소드
}

2. 부모 클래스 생성자 호출

  • super(): 부모 클래스의 생성자를 호출하는 방법입니다. 자식 클래스의 생성자에서 반드시 호출해야 하며, 기본 생성자가 없으면 오류가 발생합니다.
  • 예시:
public class Point {
    int x, y;
    
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public Point() {
        this(0, 0); // 다른 생성자 호출
    }
}

3. 업캐스팅과 다운캐스팅

  • 업캐스팅 (Upcasting): 자식 클래스 객체를 부모 클래스 타입으로 변환하는 과정입니다. 안전하지만, 자식 클래스의 메소드에 접근할 수 없습니다.
  • 다운캐스팅 (Downcasting): 부모 클래스 타입을 자식 클래스 타입으로 변환하는 과정입니다. 다운캐스팅을 할 때는 instanceof 연산자를 사용하여 타입 확인 후 안전하게 수행해야 합니다.
  • 예시:
Person p = new Student(); // 업캐스팅
if (p instanceof Student) {
    Student s = (Student) p; // 다운캐스팅
}

4. 메소드 오버라이딩 (Method Overriding)

  • 정의: 자식 클래스에서 부모 클래스의 메소드를 재정의하는 과정입니다. 동적 바인딩을 통해 실행 시점에 결정됩니다.
  • 예시:
public class Animal {
    void sound() {
        System.out.println("Animal makes sound");
    }
}

public class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

5. 메소드 오버로딩 (Method Overloading)

  • 정의: 같은 이름의 메소드를 매개변수의 개수나 타입이 다르게 정의하는 것입니다. 컴파일 시점에 결정됩니다.
  • 예시:
public void add(int a, int b) {
    // 정수 덧셈
}

public void add(double a, double b) {
    // 실수 덧셈
}

6. 접근 제어자

  • private: 해당 클래스 내부에서만 접근 가능.
  • protected: 같은 패키지 내 및 자식 클래스에서 접근 가능.
  • default (package-private): 같은 패키지 내에서 접근 가능.
  • public: 어디서든 접근 가능.

7. 추상 클래스 (Abstract Class)

  • 정의: 하나 이상의 추상 메소드를 포함하는 클래스입니다. 추상 클래스는 객체를 생성할 수 없으며, 상속받은 자식 클래스에서 구현해야 합니다.
  • 구문:
public abstract class AbstractClass {
    abstract void abstractMethod(); // 추상 메소드
}

public class ConcreteClass extends AbstractClass {
    @Override
    void abstractMethod() {
        // 메소드 구현
    }
}

8. 인터페이스 (Interface)

  • 정의: 클래스가 구현해야 하는 메소드의 집합을 정의한 것입니다. 인터페이스는 다중 상속이 가능합니다.
  • 구문:
public interface MyInterface {
    void method1();
    void method2();
}

public class MyClass implements MyInterface {
    @Override
    public void method1() {
        // 메소드 구현
    }
    
    @Override
    public void method2() {
        // 메소드 구현
    }
}

9. 다중 상속

  • 클래스: Java에서는 클래스의 다중 상속을 지원하지 않지만, 인터페이스를 통해 다중 구현이 가능합니다.
  • 인터페이스 상속: 인터페이스는 다른 인터페이스를 상속받을 수 있으며, extends 키워드를 사용합니다.
반응형