[Java] 메소드 오버로딩/메소드 오버라이딩

소이뎁·2023년 10월 11일
1

Java

목록 보기
14/26
post-thumbnail

📍 메소드 오버로딩 vs. 메소드 오버라이딩

메소드 오버로딩메소드 오버리이딩
특징파라미터 갯수, 타입이 다르면 실행하위 클래스의 메소드가 상위 클래스의 메소드와 형태가 동일할 때 실행
상속상관 X상관 O
다형성상관 O상관 O

📍 메소드 오버로딩

  • 서로 다른 메소드가 동일한 이름을 갖지만, 입력 매개변수(개수, 타입)에 따라 서로 다른 signature을 가지는 것이다.
  • 리턴 타입과는 관련이 없다.
  • 생성자도 메소드이므로 오버로딩이 가능하다.
// 🟢 Person Class
package lesson02.ex1;

public class Person {
	// 필드
	private String name;
	private int age;
	
	// 메소드
	// 생성자1
	public Person() {
		System.out.println("name: " + this.name + " age: " + this.age);
	}
	
	// 생성자2
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("name: " + this.name + " age: " + this.age);
	}
}
// 🟢 PersonTest Class (Main Class)
package lesson02.ex1;

public class PersonTest {

	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person("홍길동", 30);
	}

}

📍 메소드 오버라이딩

  • 하위 클래스에서 상위 클래스의 메소드를 재정의하는 것이다.
  • @Override 명령어를 사용하여 형식 오류를 피할 수 있다.
// 🟢 Person Class
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("사람입니다.");
    }
    
}
// 🟢 Student Class
package lesson03.ex01;

public class Student extends Person {
	
	public Student(String name, int age) {
		super(name, age);
	}
	
	@Override
	public void introduce() {
    	System.out.println("학생입니다.");
    }
	
}
// 🟢 Student Class (Main Class)
package lesson03.ex01;

public class InheritanceTest {

	public static void main(String[] args) {

		Student s1 = new Student("신보람", 20);
		s1.introduce();

	}
	
}

0개의 댓글