명품 자바 프로그래밍
[명품 자바 프로그래밍] 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 키워드를 사용합니다.
반응형