다형성(Polymorphism)
오버로딩
- 같은 이름의 메소드를 여러 개를 선언하는 기법이다.
- 매개변수의 개수 혹은 타입이 다르면 같은 이름의 메소드로 여러개 선언할 수 있다.
- 이름이 아니라 매개변수로 구별이 가능하다.
- 전달된 값의 타입 혹은 개수로 알아서 구분하여 알맞은 메소드가 자동으로 호출된다.
//overloading void dog(){ System.out.println("매개변수 없음"); } void dog(int a, int b){ System.out.println("매개변수: " + a + b); } void dog(String c){ System.out.println("매개변수: " + c); }
오버로딩의 예 : 기본생성자와 매개변수가 있는 생성자가 동시에 있는 클래스
보통 기본생성자를 선언해줌
오버라이딩(Overriding) : 재정의
- 부모 필드에 이미 a() 라는 메소드가 존재한다면 자식 객체 생성시 부모 생성자가 먼저 호출되기 때문에, 부모 클래스의 a()가 먼저 메모리에 올라간다
- 그 다음 자식 필드를 완성시킬 때 같은 이름의 a()라는 메소드가 선언되어 있다면, 같은 이름으로 2개가 만들어지는 것이 아니라 기존에 만들어진 부모 필드의 a()메소드에 자식에서 작성한 메소드가 덮어씌워진다.
- 자식 객체 a() 메소드를 사용하게 되면 재정의된 기능으로 사용하며 이것을 오버라이딩이라고 한다.
class Car{ String brand; String color; int price; public Car(String brand, String color, int price) { this.brand = brand; this.color = color; this.price = price; } void engineStart() { System.out.println(brand+" 열쇠로 시동켜기"); } void engineStop() { System.out.println(brand+" 열쇠로 시동 끄기"); } } class SuperCar extends Car{ public SuperCar(String brand, String color, int price, String pw) { super(brand, color, price); this.pw = pw; } @Override void engineStart() { System.out.println(brand+" 원격으로 시동켜기"); } @Override void engineStop() { System.out.println(brand+" 원격으로 시동 끄기"); }
<Overloading과 Overriding의 차이점>
구분 오버로딩 오버라이딩 메서드 이름 동일 동일 매개변수, 타입 다름 동일 리턴 타입 상관없음 동일
'Java > Java(base)' 카테고리의 다른 글
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof (0) | 2021.11.30 |
---|---|
[Java] static (정적) : 모든 객체가 공유 (0) | 2021.11.29 |
[Java] 상속(inheritance), 자식클래스 생성자, super() (0) | 2021.11.29 |
[Java] 클래스의 개념, 선언, 사용, 생성자, this (0) | 2021.11.29 |
[Java] storage class(저장 기억 부류) : 변수 종류 //지역변수 전역변수 정적 변수 (0) | 2021.11.29 |