질럿 클래스 만들기
package ex05.ch01;
public class Zealot {
String name;
int hp;
int attack;
public Zealot(String name, int hp, int attack) {
this.name = name;
this.hp = hp;
this.attack = attack;
}
}
드라군 클래스 만들기
package ex05.ch01;
public class Dragoon {
String name;
int hp;
int attack;
public Dragoon(String name, int hp, int attack) {
this.name = name;
this.hp = hp;
this.attack = attack;
}
}
App.java파일에서 실행해보기
package ex05.ch01;
public class App {
static void attack(Zealot u1, Zealot u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(Zealot u1, Dragoon u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(Zealot u1, DarkTempler u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(Dragoon u1, Zealot u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(Dragoon u1, Dragoon u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(Dragoon u1, DarkTempler u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(DarkTempler u1, Zealot u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(DarkTempler u1, Dragoon u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
static void attack(DarkTempler u1, DarkTempler u2) {
u2.hp = u2.hp - u1.attack;
System.out.println(u2.name + "이 공격당했습니다");
System.out.println(u2.name + "의 남은 hp : " + u2.hp);
}
public static void main(String[] args) {
Zealot z1 = new Zealot("질럿1", 100, 10);
Zealot z2 = new Zealot("질럿2", 100, 10);
Dragoon d1 = new Dragoon("드라군1", 100, 5);
Dragoon d2 = new Dragoon("드라군2", 100, 5);
DarkTempler dt1 = new DarkTempler("다크템플러1", 100, 20);
DarkTempler dt2 = new DarkTempler("다크템플러2", 100, 20);
// 질럿 -> 질럿 공격
attack(z1, z2);
// 질럿 -> 드라군 공격
attack(z1, d1);
// 질럿 -> 다크 공격
attack(z1, dt1);
// 드라군 -> 질럿 공격
attack(d1, z1);
// 드라군 -> 드라군 공격
attack(d1, d2);
// 드라군 -> 다크 공격
attack(d1, dt1);
// 다크 -> 질럿 공격
attack(dt1, z1);
// 다크 -> 드라군 공격
attack(dt1, d1);
// 다크 -> 다크 공격
attack(dt1, dt2);
// 오버로딩 체험하기
System.out.println();
System.out.println(1);
System.out.println(1.0);
System.out.println('가');
System.out.println("문자열");
System.out.println(true);
}
}
오버로딩의 한계 - > 경우의 수가 많아지면 사용하기 어려움
상속 -> 타입 일치성(다형성)
스택은 다른 스택에 접근 못한다.
스택은 자신의 힙 영역에는 접근이 가능하다.
메서드 내부에서 만든 변수는 지역변수
클래스 내부에서 만든 변수는 힙변수
메서드 내부에서 -> 힙변수 접근이되요.
메서드 내부에서 다른 메서드 변수 접근은 안되요.
메서드 내부에서 다른 힙변수에 접근은 안됨.
-본인의 힙변수에서 접근가능(this)
다른 힙변수에 접근하고 싶다면 인수로 전달