📍 메소드 오버로딩 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();
	}
	
}
