overloading : 과적재 => 함수의 이름이 같아도 다른 함수로 인식되게
package ch05;
class 임꺽정{
void 달리기() {
System.out.println("달리기1");
}
//오버로딩
void 달리기(int speed) {
System.out.println("달리기2 "+speed);
}
void 달리기 (double speed) {
System.out.println("달리기3 : "+speed);
}
void 달리기(int speed,double power) {
System.out.println("달리기4");
}
void 달리기2() {
System.out.println("달리기5");
}
}
public class OOPEx04 {
public static void main(String[] args) {
임꺽정 e = new 임꺽정();
e.달리기();
e.달리기(2);
e.달리기(5.0);
e.달리기(1, 1.0);
}
}
오버로딩은 어느 정도 경우의 수 제한이 있다면 좋다, 하지만 경우의 수가 많다면 힘들다.
package ch05;
class 전사{ //검
String name = "전사";
void 기본공격(궁수 e1) {
System.out.println("검으로 "+e1.name +" 공격하기");
}
void 기본공격(광전사 e1) {
System.out.println("검으로 "+e1.name +" 공격하기");
}
}
class 궁수{ // 활
String name = "궁수";
void 기본공격(광전사 e1) {
System.out.println("활로 "+e1.name+" 공격하기");
}
}
class 광전사{ // 도끼
String name = "광전사";
void 기본공격(전사 e1) {
System.out.println("도끼로 "+e1.name+" 공격하기");
}
}
public class OOPEx05 {
public static void main(String[] args) {
전사 u1 = new 전사();
궁수 u2 = new 궁수();
광전사 u3 = new 광전사();
//오버로딩 => 기억해야할 메서드이름이 기본공격() 편하다!
//오버로딩은 어느 정도 경우의 수 제한이 있다면 좋다, 하지만 경우의 수가 많다면 힘들다.
//why) 유닛이 100개가 되면 기본공격 메서드가 100개가 되어야한다.
u1.기본공격(u2);
u2.기본공격(u3);
u3.기본공격(u1);
u1.기본공격(u3);
}
}
package ch05;
class 프로토스유닛{
String name = "프로토스 유닛";
void 기본공격(프로토스유닛 e1) {}
String 이름확인() {
return "";
}
}
class 질럿 extends 프로토스유닛{
String name = "질럿";
//변수는 무효화 시키지 않고 그냥 가져옴
//오버라이드 - 부모가 같고 있는 메서드를 동일하게 자식이 가지고있으면 부모의 메서드를 무효화시킴
void 기본공격(프로토스유닛 e1) {
System.out.println(this.name+"이 "+e1.이름확인()+"을 공격합니다.");
}
//오버라이드
String 이름확인() {
return name;
}
}
class 드라군 extends 프로토스유닛{
String name = "드라군";
//변수는 무효화 시키지 않고 그냥 가져옴
//오버라이드 - 부모가 같고 있는 메서드를 동일하게 자식이 가지고있으면 부모의 메서드를 무효화시킴
void 기본공격(프로토스유닛 e1) {
System.out.println(this.name+"이 "+e1.이름확인()+"을 공격합니다.");
}
//오버라이드
String 이름확인() {
return name;
}
}
class 다템 extends 프로토스유닛{
String name = "다템";
//변수는 무효화 시키지 않고 그냥 가져옴
//오버라이드 - 부모가 같고 있는 메서드를 동일하게 자식이 가지고있으면 부모의 메서드를 무효화시킴
void 기본공격(프로토스유닛 e1) {
System.out.println(this.name+"이 "+e1.이름확인()+"을 공격합니다.");
}
//오버라이드
String 이름확인() {
return name;
}
}
public class OOPEx06 {
public static void main(String[] args) {
프로토스유닛 u1 = new 질럿(); // heap (질럿,프로토스유닛)
프로토스유닛 u2 = new 드라군(); // heap (드라군,프로토스유닛)
프로토스유닛 u3 = new 다템(); // heap (다크템플러,프로토스유닛)
u1.기본공격(u2);
}
}