SIMPOLOR
단순하고 색있게
상속(Inheritance)
단순색
·
2024년 06월 22일
Java
## 상속(Inheritance)이란? 상속은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 하나의 클래스가 다른 클래스의 속성과 메서드를 상속받아 재사용하는 것을 의미합니다. 이를 통해 코드의 재사용성을 높이고, 클래스 간의 계층 구조를 형성할 수 있습니다. ## 상속의 기본 개념 ### 부모 클래스 (Super Class or Base Class) 상속을 제공하는 클래스입니다. 다른 클래스에 상속될 수 있는 속성과 메서드를 정의합니다. ### 자식 클래스 (Sub Class or Derived Class) 상속을 받는 클래스입니다. 부모 클래스의 속성과 메서드를 물려받고, 추가적인 속성과 메서드를 정의할 수 있습니다. ## 상속 예제 ``` // 부모 클래스 정의 class Animal { // 필드 protected String name; // 생성자 public Animal(String name) { this.name = name; } // 메서드 public void eat() { System.out.println(name + " is eating."); } public void sleep() { System.out.println(name + " is sleeping."); } } // 자식 클래스 정의 class Dog extends Animal { // 추가적인 필드 private String breed; // 생성자 public Dog(String name, String breed) { super(name); // 부모 클래스의 생성자 호출 this.breed = breed; } // 추가적인 메서드 public void bark() { System.out.println(name + " is barking."); } // 메서드 오버라이딩 @Override public void eat() { System.out.println(name + " the dog is eating."); } } public class Main { public static void main(String[] args) { // Animal 객체 생성 Animal animal = new Animal("Generic Animal"); animal.eat(); // 출력: Generic Animal is eating. animal.sleep(); // 출력: Generic Animal is sleeping. // Dog 객체 생성 Dog dog = new Dog("Rex", "Labrador"); dog.eat(); // 출력: Rex the dog is eating. (오버라이딩된 메서드 호출) dog.sleep(); // 출력: Rex is sleeping. (부모 클래스의 메서드 호출) dog.bark(); // 출력: Rex is barking. (자식 클래스의 메서드 호출) } } ``` 1. **Animal 클래스**는 name 필드와 eat(), sleep() 메서드를 정의합니다. 이 클래스는 모든 동물이 가질 수 있는 공통 속성과 동작을 정의합니다. 2. **Dog 클래스**는 Animal 클래스를 상속받아 name 필드와 eat(), sleep() 메서드를 물려받습니다. 추가적으로 breed 필드와 bark() 메서드를 정의하며, eat() 메서드를 오버라이딩하여 강아지 특유의 동작을 정의합니다. 3. 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출할 때 super(name)을 사용하여 Animal 클래스의 생성자를 호출합니다. 4. 자식 클래스에서 부모 클래스의 메서드를 재정의하여 동작을 변경할 수 있습니다. 예제에서는 Dog 클래스가 Animal 클래스의 eat() 메서드를 오버라이딩했습니다. ## 마무리 상속은 객체 지향 프로그래밍에서 코드 재사용과 클래스 간의 계층 구조를 형성하는 중요한 개념입니다. 부모 클래스에서 정의한 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있게 하여, 중복 코드를 줄이고 코드의 유지보수를 용이하게 합니다. 또한, 상속을 통해 기능을 확장하거나 변경할 수 있어 유연한 프로그래밍이 가능해집니다.
연관 포스트
BigDecimal 클래스
Java jar 실행 옵션
다형성(Polymorphism)
캡슐화(Encapsulation)
추상화(Abstraction)