default constructor)는 제공되지 않음client 코드)에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있음UserInfo.java
package ch07; public class UserInfo { public String userId; public String userPassWord; public String userName; public String userAddress; public String phoneNumber; public UserInfo(){} public UserInfo(String userId, String userPassWord, String userName) { this.userId = userId; this.userPassWord = userPassWord; this.userName = userName; } public String showUserInfo() { return "고객님의 아이디는 " + userId + "이고, 등록된 이름은 " + userName + "입니다."; } }UserInfoTest.java
package ch07; public class UserInfoTest { public static void main(String[] args) { UserInfo userLee = new UserInfo(); userLee.userId = "a12345"; userLee.userPassWord = "zxcvbn12345"; userLee.userName = "Lee"; userLee.phoneNumber = "01034556699"; userLee.userAddress = "Seoul, Korea"; System.out.println(userLee.showUserInfo()); UserInfo userKim = new UserInfo("b12345", "09876mnbvc", "Kim"); System.out.println(userKim.showUserInfo()); } }출력 결과
정의
- 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
조건
- 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른 것은 오버로딩을 할 수 없다는 것이다.
사용 예시
lass OverloadingTest { public static void main(String[] args) { OverloadingMethods om = new OverloadingMethods(); om.print(); System.out.println(om.print(3)); om.print("Hello!"); System.out.println(om.print(4, 5)); } } class OverloadingMethods { public void print() { System.out.println("오버로딩1"); } String print(Integer a) { System.out.println("오버로딩2"); return a.toString(); } void print(String a) { System.out.println("오버로딩3"); System.out.println(a); } String print(Integer a, Integer b) { System.out.println("오버로딩4"); return a.toString() + b.toString(); } }출력 결과
오버로딩1 오버로딩2 3 오버로딩3 Hello! 오버로딩4 45
오버로딩을 사용하는 이유
- 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.
- 메소드의 이름을 절약할 수 있다.
정의
- 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 의미한다.
- 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.
조건
- 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
사용 예시
public class OverridingTest { public static void main(String[] args) { Person person = new Person(); Child child = new Child(); Senior senior = new Senior(); person.cry(); child.cry(); senior.cry(); } } class Person { void cry() { System.out.println("흑흑"); } } class Child extends Person { @Override protected void cry() { System.out.println("잉잉"); } } class Senior extends Person { @Override public void cry() { System.out.println("훌쩍훌쩍"); } }출력 결과
흑흑 잉잉 훌쩍훌쩍
오버로딩 - 기존에 없는 새로운 메소드를 추가하는 것
오버라이딩 - 상속받은 메소드를 재정의 하는 것
| 구분 | 오버라이딩 | 오버로딩 |
|---|---|---|
| 리턴형 | 동일해야 한다. | 달라도 된다. |
| 메서드명 | 동일해야 한다. | 동일해야 한다. |
| 매개변수 | 동일해야 한다. | 달라야만 한다. |
| 적용 범위 | 상속관계에서 적용된다. | 같은 클래스 내에서 적용된다. |