1. 상속(inheritance) 이란?

  • 기존의 클래스를 재사용하는 방식 중의 하나입니다.한 번 작성한 코드가 재사용이 필요하다면, 변경사항만 코드로 작성하므로 상대적으로 적은 양의 코드를 작성할 수 있게 됩니다. 이렇게 코드를 재사용하면, 코드와 클래스가 많아질수록 관리가 용이하다는 장점이 있습니다.
  • 상속을 통해 클래스간의 계층구조를 만들게 됩니다.
  • 상속의 특징
    1. 부모 클래스에서 정의된 필드와 메소드를 물려 받습니다.
    2. 새로운 필드와 메소드를 추가할 수 있습니다.
    3. 부모 클래스스에서 물려받은 메소드를 수정할 수 있습니다.
class Animal {
    String name;

    public void cry() {
        System.out.println(name + " is crying.");
    }
}

class Dog extends Animal {

    Dog(String name) {
        this.name = name;
    }

    public void swim() {
        System.out.println(name + " is swimming!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("코코");
        dog.cry();
        dog.swim();
        
        Animal dog2 = dog;
        dog2.cry();
//        dog2.swim(); // compile error // 부모 타입(Animal)으로 생성할 경우 자식의 변수와 메소드는 사용할 수 없다.
    }
}

 

 

2. 오버로딩(overloading) 이란?

  • 한 클래스 내에 동일한 이름의 메소드를 여러개 정의하는 것

 

  • 오버로딩의 조건
    • 메소드 이름이 동일해야 합니다.
    • 매개변수의 개수 혹은 타입달라야 합니다.

 

// 오버라이딩 예제
int add(int x, int y, int z) {
    int result = x + y + z;
    return result;
}

long add(int a, int b, long c) {
    long result = a + b + c;
    return result;
}

int add(int a, int b) {
    int result = a + b;
    return result;
}
// 오버라이딩이 아닌 경우
int add(int x, int y, int z) {
    int result = x + y + z;
    return result;
}

long add(int a, int b, int c) {
    long result = a + b + c;
    return result;
}
// 반환타입은 다르지만 매개변수의 자료형과 개수는 같기에 오버로딩이 아닙니다.

 

 

3. 오버라이딩(overriding) 이란?

  • 부모 클래스로부터 상속받은 메소드의 내용을 변경하는 것
  • 상속받은 메소드를 그대로 사용하기도 하지만, 필요에 의해 변경해야할 경우 오버라이딩을 합니다.

 

  • 오버라이딩의 조건
    • 부모 클래스의 메소드와 매개변수가 같아야 합니다.
    • 부모 클래스의 메소드와 반환타입이 같아야 합니다.
    • 부모 클래스의 메소드와 이름이 같아야 합니다.

+ Recent posts