2018-3-1 TIL 메소드 오버라이딩
메소드 오버라이딩
- 한 클래스에서 동일한 이름의 메소드를 정의하는것은 안된다. 그러나 매개변수의 선언이 다르면 가능하다. 이것을 메소드 오버라이딩이라고 한다.
메소드 오버라이딩의 조건
- 메소드를 호출할때, 메소드의 이름, 메소드의 매개변수의 정보 2가지를 가지고 메소드를 찾게된다.
class MyHome {
void mySimpleRoom(int n) {...};
void mySimpleRoom(int n1, int n2) {...};
void mySimpleRoom(double n1, double n2) {...};
}
- 매개변수의 선언이 다르기때문에, 메소드의 이름이 같더라도 구분이 가능하다. 매개변수의 수 또는 타입이 달라야 한다. 하지만 반환형이 다른 경우 메소드 오버로딩이 성립이 안된다.
생성자의 오버로딩
package yoon;
class Person {
private int regiNum; // 주민번호
private int passNum; // passport num
Person(int rnum, int pnum) {
regiNum = rnum;
passNum = pnum;
}
Person(int rnum) {
regiNum = rnum;
passNum = 0;
}
void showPersonalInfo() {
System.out.println("주민등록 번호 : " + regiNum);
if(passNum != 0) {
System.out.println("여권 번호 : " + passNum);
} else {
System.out.println("여권을 가지고 있지 않습니다.");
}
}
}
public class ConOverloading {
public static void main(String [] args){
Person jung = new Person(335577, 112233);
Person hong = new Person(775544);
jung.showPersonalInfo();
hong.showPersonalInfo();
}
}
// result
주민등록 번호 : 335577
여권 번호 : 112233
주민등록 번호 : 775544
여권을 가지고 있지 않습니다.
- 생성자의 오버로딩은 다양한 상황을 고려한 인스턴스 생성을 가능하게 한다.
키워드 this를 이용한 인스턴스 변수의 접근
package yoon;
class SimpleBox {
private int data;
SimpleBox(int data){
this.data = data;
}
void setData(int data){
this.data = data;
}
int getData() {
return this.data;
}
}
public class ThisInst {
public static void main(String [] args){
SimpleBox box = new SimpleBox(99);
System.out.println(box.getData());
box.setData(77);
System.out.println(box.getData());
}
}
//result
99
77
- this.data에서 this가 의미하는 것은 ‘이 문장이 속한 인스턴스’이다.
String클래스
문자열 생성을 위한 두 가지 방법의 차이는?
- String str1 = new String(“My String”);
- String str2 = “Your String”;
package yoon;
public class ImmutableString {
public static void main(String [] args){
String str1 = "Simple String";
String str2 = "Simple String";
String str3 = new String("Simple String");
String str4 = new String("Simple String");
if(str1 == str2)
System.out.println("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
if(str3 == str4)
System.out.println("str3과 str4는 동일 인스턴스 참조");
else
System.out.println("str3과 str4는 다른 인스턴스 참조");
}
}
//result
str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조
- 위와같은 차이를 보이는 이유는 String 인스턴스가 Immutable인스턴스이기 때문이다. Immutable은 변경할 수 없는 의미를 지닌다.
String str1 = "AtoZ";
String str2 = "AtoZ";
- 위의 str1과 str2는 문자열 내용이 같기때문에, 하나의 인스턴스를 생성을 해서 공유를 한다.
Written on March 1, 2018