자식이 부모클래스를 extends 하고 있을 때, 자식 클래스에서 부모클래스가 가지고 있는 메소드를 같은 타입과 같은 이름으로 사용할 경우, 재정의(override) 한다고 말한다.
ex.
// 부모 클래스
public class parent {
private void ac1() { // 프라이빗
System.out.println("private!");
}
protected void ac2() { // 프로텍티드
System.out.println("protected!");
}
void ac3() { // 디폴트
System.out.println("default!");
}
public void ac4() { // 퍼블릭
System.out.println("public");
}
}
// 자식 클래스
public class child extends parent {
public void ac4() { // 부모 클래스의 ac4메소드를 자식 클래스에서 override
System.out.println("public! in child class");
}
}
// 메인 클래스
public class main {
public static void main(String[] args) {
parent a = new parent(); // 부모 클래스 선언
child b = new child(); // 자식 클래스 선언
a.ac4();
b.ac4();
}
}
Overload는 메소드의 이름은 같지만, 인자의 수나, 자료형이 다른 메소드를 중복으로 선언하는 것이다. 즉 같은 메소드라 해도, 매개변수만 다르면 정의하여 사용가능하다. 메소드의 이름이 같아야하며, 리턴 형은 달라도 상관 없다. 파라미터의 개수가 달라야하며, 파라미터의 개수가 같을 경우는 데이터 타입이 달라야한다.
ex.
public void ac4() {
...
}
public void ac4(String test) {
...
}
public void ac4(String test, int testNum) {
...
}
ex.
private void ac1() { // 프라이빗
System.out.println("private!");
}
ex.
void ac3() { // 디폴트
System.out.println("default!");
}
ex.
protected void ac2() { // 프로텍티드
System.out.println("protected!");
}
ex.
public void ac4() { // 퍼블릭
System.out.println("public");
}