반응형
오버로딩 (Overloading)
메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것이다. 보통 하나의 메서드에는 하나의 기능만을 구현해야 하기 때문에, 같은 이름의 메서드를 여러 개 만들어 여러 기능을 구현하기 위해 사용한다.
메서드 오버로딩은 같은 메서드 이름을 사용한다고 해서 오버로딩이 되는 것은 아니다.
메서드 오버로딩을 하기 위한 조건
- 같은 이름의 메서드 이름을 정의한다.
- 매개변수의 개수 또는 매개변수 타입을 다르게 정의한다.
이 두 가지 조건을 모두 만족해야만이 문제없이 실행이 가능하다.
public class OverloadingEx {
public static void main(String[] args) {
OverloadingMethod test = new OverloadingMethod(); // 객체 생성
test.area();
test.area(5);
test.area(5, 10);
}
}
class OverloadingMethod {
public void formula() {
System.out.println("formula()");
System.out.println("formula(int r)");
System.out.println("formula(int a, int b)");
}
public void formula(int r) {
System.out.println(r * r * 3.14);
}
public void formula(int a, int b) {
System.out.println(a * b);
}
}
이렇게 메서드 오버로딩을 사용하면, 하나의 메서드로 여러 경우의 수를 해결할 수 있다.
오버라이딩 (Overriding)
자바에서 오버라이딩은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것이다.
메서드 오버라이딩을 하기 위한 조건
- 상위 클래스와 하위 클래스 관계에서만 성립할 수 있다.
- 메서드의 선언부(메서드 이름, 매개변수, 반환 타입)가 상위 클래스의 메서드랑 일치해야 한다.
- 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
- 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.
public class MethodOverridingEx {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.run();
dog.run();
cat.run();
}
}
class Animal {
void run() {
System.out.println("동물이 달린다.");
}
}
class Dog extends Animal {
void run() {
System.out.println("강아지가 달린다.");
}
}
class Cat extends Animal {
void run() {
System.out.println("고양이가 달린다.");
}
}
모든 객체를 상위 클래스 타입 하나로 선언하면 배열을 사용하여 간편하게 선언할 수 있다.
public class MethodOverridingEx {
public static void main(String[] args) {
// Animal animal = new Animal();
// Dog dog = new Dog();
// Cat cat = new Cat();
// animal.run();
// dog.run();
// cat.run();
Animal[] animals = new Animal[] {new Dog(), new Cat(), new Animal()};
for (Animal animal : animals) {
animal.run();
}
}
}
반응형
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바의 this()와 this 개념 정리 및 차이점 (0) | 2022.09.14 |
---|---|
[Java] 자바 생성자(Constructor) 개념 정리 및 예제 (0) | 2022.09.14 |
[Java] 자바 메서드(Method) 개념 정리 (0) | 2022.09.14 |
[Java] 자바 필드(Field) 개념 정리 및 예제 (0) | 2022.09.13 |
[Java] 자바 클래스와 객체, 인스턴스 개념 정리 및 활용 (0) | 2022.09.13 |