# 상속 (Inheritance)
- 객체지향 프로그래밍의 중요한 특징 중 하나이다.
- 기존 클래스의 속성과 메서드를 새 클래스에 물려주는 것을 말한다.
- 상속을 통해 코드의 재사용성을 높이고, 클래스 간의 계층 구조를 정의할 수 있다.
- 상속의 기본 문법
- Java에서 클래스는
extends 키워드를 사용하여 다른 클래스를 상속받는다.
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
dog.bark();
}
}
- Java 8 이후: super 키워드
- Java 8 이후부터는 부모 클래스의 생성자나 메서드를 호출할 때
super 키워드를 사용할 수 있다.
class Animal {
String name;
Animal(String name) {
this.name = name;
}
void eat() {
System.out.println(name + " eats food.");
}
}
class Dog extends Animal {
Dog(String name) {
super(name);
}
void bark() {
System.out.println(name + " barks.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.eat();
dog.bark();
}
}
# 다형성 (Polymorphism)
- 같은 타입의 객체가 여러 형태를 가질 수 있는 것을 의미한다.
- 주로 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있게 함으로써 구현한다.
- 다형성의 기본 예제
class Animal {
void sound() {
System.out.println("This animal makes a sound.");
}
}
class Dog extends Animal {
void sound() {
System.out.println("The dog barks.");
}
}
class Cat extends Animal {
void sound() {
System.out.println("The cat meows.");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound();
myCat.sound();
}
}
- Java 8 이후: 인터페이스와 다형성
- Java 8부터는 인터페이스에 디폴트 메서드를 정의할 수 있게 되었다.
- 다형성을 더 유연하게 사용할 수 있다.
interface Animal {
void sound();
default void sleep() {
System.out.println("This animal sleeps.");
}
}
class Dog implements Animal {
public void sound() {
System.out.println("The dog barks.");
}
}
class Cat implements Animal {
public void sound() {
System.out.println("The cat meows.");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound();
myCat.sound();
myDog.sleep();
myCat.sleep();
}
}