같은 이름의 메소드를 여러개 생성하는 것
String info() {
return "아이디 : " + super.id + "\n" + "비밀번호: " + super.passwd;
}
public void info(int n) {
System.out.println();
}
public void info(short m) {
System.out.println();
}
public String info(int a, String str, byte d) {
System.out.println();
return str;
}
protected void info(String s,int b, byte f) { //순서가 다르기 때문에 OK
System.out.println();
}
메소드 오버로딩과 규칙은 다르지 않다. (접근제한자가 달라도 파라미터가 같으면 중복)
public Child() {
}
public Child(String id, String passwd) {
this.id = id;
this.passwd = passwd;
}
/*
public Child(String id, String passwd, String name) {
// this.name = name;
// this(id, passwd); // 생성자 내에서 다른 생성자를 불러올 수 있지만, 반드시 첫줄에서 불러와야 함. (Constructor call must be the first statement in a constructor)
* // 생성자가 먼저 위치하지 않았으므로 오류 발생
this.passwd = passwd;
}
*/
public Child(String id, String passwd, String name) {
this.passwd = passwd;
}
메소드를 재정의하는 것
<오버라이딩 규칙>
1. 메소드의 오버라이딩 시 접근제한자는 부모클래스에서 정의해둔 메소드의 접근제한자보다 더 제한적이면 안된다.
2. 메소드의 오버라이딩 시 껍데기(return 타입, 메소드명, 파라미터)는 똑같아야 한다.
3. 메소드 안의 코드를 새롭게 정의해서 만들면 된다.
@Override //애노테이션(어노테이션)
String info() {
return "아이디 : " + super.id + "\n" + "비밀번호: " + super.passwd;
} //예시를 위해 getter setter 쓰지 않음
//부모의 메서드를 오버라이딩해줄 때는 어노테이션을 꼭 쓴다.
//부모의 값을 가져올 때는 super. 로 꼭 찝어서 가져와야 한다.
//안그러면 자식 것이 나오는 사태가 발생한다. =자기 클래스 타입에서 먼저 찾음.
public void setName(String name) {
Pattern p = Pattern.compile("^[가-힣]{2,6}$");
Matcher m = p.matcher(name);
if(m.matches()) {
this.name = name;
}
else {
System.out.println("[경고] 성명은 공백이 없는 한글로만 이루어져야 하며 최소 2글자 이상 최대 6글자로만 되어져야 합니다.\n");
}
}
==>
public void setName(String name) {
this.name = name;
}
// 자식 클래스 1> ------------------------------------------------------------------
@Override
public void setName(String name) {
Pattern p = Pattern.compile("^[가-힣]{2,6}$");
Matcher m = p.matcher(name);
if(m.matches()) {
super.setName(name);
}
else {
System.out.println("[경고] 성명은 공백이 없는 한글로만 이루어져야 하며 최소 2글자 이상 최대 6글자로만 되어져야 합니다.\n");
}
}
// 자식 클래스 2> ------------------------------------------------------------------
@Override
public void setName(String name) {
// 성명은 공백이 없는 한글 또는 영문으로만 이루어져야 하며 최소 2글자 이상 최대 6글자로만 되어져야 한다.
// == 1. 정규표현식(Regular Expression) 패턴을 작성한다. == //
Pattern p = Pattern.compile("^[가-힣A-Za-z]{2,10}$");
// == 2. 문자열이 주어진 정규식 패턴과 일치하는지 판별하는 객체를 생성한다. == //
Matcher m = p.matcher(name);
// == 3. 판별하도록 한다. == //
if(m.matches()) {
super.setName(name);
}
else {
System.out.println("[경고] 성명은 공백이 없는 한글로만 이루어져야 하며 최소 2글자 이상 최대 10글자로만 되어져야 합니다.\n");
}
}