같은 이름의 메소드를 중복하여 정의하는 것
원래 자바에서는 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없는데,
매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성가능
ex)
void println(int x)
void println(String x)
void println(long x)
.
.
.
- 메소드 이름이 같아야 함
- 매개변수의 개수 또는 타입이 달라야 함
- 변환타입엔 영향끼치지 않는다.
double add(int a, double b) {return a+b;}
double add(double a, int b) {return a+b;}
class Test {
static void display(int num1) { System.out.println(num1); }
static void display(int num1, int num2) { System.out.println(num1 * num2); }
static void display(int num1, double num2) { System.out.println(num1 + num2); }
}
public class Method06 {
public static void main(String[] args) {
Test myfunc = new Test();
myfunc.display(10);
myfunc.display(10, 20);
myfunc.display(10, 3.14);
myfunc.display(10, 'a');
}
}
출력결과
10
200
13.14
970
출처) TCP School(http://www.tcpschool.com/java/java_usingMethod_overloading)
위에 덮어쓰다 라는 뜻으로 상속받은 메소드의 내용을 재정의하는 것 (change)
class Exployee {
public int getSalary() {
return 0;
}
}
class Manager extends Exployee {
@Override
public int getSalary() {
return 5000000;
}
}
class Programmer extends Exployee {
@Override
public int getSalary() {
return 6000000;
}
}
public class salary {
public static void main(String[] args) {
Manager obj1 = new Manager();
System.out.println("관리자의 월급: " + obj1.getSalary());
Programmer obj2 = new Programmer();
System.out.println("관리자의 월급: " + obj2.getSalary());
}
}
출력 결과
관리자의 월급: 5000000
관리자의 월급: 6000000
getSalary 를 오버라이딩 한 것이다.
메소드 앞에 final을 붙이면 해당 메소드는 더 이상 오버라이딩을 할 수 없다.
클래스 앞에 final이 붙어도 해당 클래스를 상속 할 수 없다.

표로 간단하게 정리하자면 이렇게 정리할 수 있다.