📍 메소드 오버로딩 vs. 메소드 오버라이딩
| 메소드 오버로딩 | 메소드 오버리이딩 |
---|
특징 | 파라미터 갯수, 타입이 다르면 실행 | 하위 클래스의 메소드가 상위 클래스의 메소드와 형태가 동일할 때 실행 |
상속 | 상관 X | 상관 O |
다형성 | 상관 O | 상관 O |
📍 메소드 오버로딩
- 서로 다른 메소드가 동일한 이름을 갖지만, 입력 매개변수(개수, 타입)에 따라 서로 다른 signature을 가지는 것이다.
- 리턴 타입과는 관련이 없다.
- 생성자도 메소드이므로 오버로딩이 가능하다.
package lesson02.ex1;
public class Person {
private String name;
private int age;
public Person() {
System.out.println("name: " + this.name + " age: " + this.age);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("name: " + this.name + " age: " + this.age);
}
}
package lesson02.ex1;
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("홍길동", 30);
}
}
📍 메소드 오버라이딩
- 하위 클래스에서 상위 클래스의 메소드를 재정의하는 것이다.
@Override
명령어를 사용하여 형식 오류를 피할 수 있다.
package lesson03.ex01;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduce() {
System.out.println("사람입니다.");
}
}
package lesson03.ex01;
public class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
@Override
public void introduce() {
System.out.println("학생입니다.");
}
}
package lesson03.ex01;
public class InheritanceTest {
public static void main(String[] args) {
Student s1 = new Student("신보람", 20);
s1.introduce();
}
}