TIL(2022.02.16)

조지성·2022년 2월 16일
0

TIL

목록 보기
34/78
post-thumbnail

오늘 한 일

  1. 방통대 운영체제 강의 듣기
  2. 자바 공부

오버로딩

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);
	}
}
profile
초보 개발자의 성장기💻

0개의 댓글