class, 상속, 추상화, 인스턴스화, 메서드호출, this.

황인성·2023년 3월 20일
0
class Main { // class, 상속, 추상화, 인스턴스화, 메서드호출, this.
	public static void main(String[] args) {
		전사 a전사 = new 전사(); // 전사 객체 생성
		a전사.이름 = "카니"; // 이름 변수에 "카니" 할당
		a전사.나이 = 22; // 나이 변수에 22 할당
		
		a전사.a무기 = new(); // a무기 변수에 칼 객체 할당
		
		a전사.공격(); // a전사 객체의 공격 메서드 호출 
		// 출력 : 카니22가 칼로 공격합니다.
		
		a전사.a무기 = new(); // a무기 변수에 활 객체 할당
		
		a전사.공격(); // a전사 객체의 공격 메서드 호출 
		// 출력 : 카니22가 활로 공격합니다.
	}
}
class 전사 { // 전사 객체가 생성됨에 따라 전사 클래스 생성
	String 이름; // 문자열 형태로 이름 변수 선언.
	int 나이; // 정수 형태로 나이 변수 선언.
	무기 a무기; // 무기 형태로 a무기 변수 선언.
	// 칼, 활 객체를 무기라는 개념으로 묶고자 무기 형태로 a무기 안에 칼, 활 객체를 초기화(무기 a무기;)해주었음
	// a무기 == class 칼, class 활
	void 공격 () { // a전사.공격();가 호출한 공격 메서드
		this.a무기.작동(이름, 나이); // a무기 객체의 작동 메서드 호출 
		// 여기서 이름, 나이는 class 전사 내부에 있는 이름, 나이만 참조함.
		// a무기.작동(this.이름, this.나이); 이렇게 작성해도 작동됨.
	}
}
abstract class 무기 { // 무기 형태로 a무기가 초기화됨에 따라 class 무기 새로 생성해줌
	abstract void 작동 (String 사용자이름, int age); 
	// this.a무기.작동(이름, 나이);가 호출한 작동 메서드 추상화 (추상화는 abstract를 class와 void메서드 앞에 둘 다 붙여줘야함.)
}
classextends 무기{ // 칼 객체가 생성됨에 따라 class 칼 생성
	void 작동 (String 사용자이름, int age) { // this.a무기.작동(이름, 나이);가 호출한 작동 메서드
		System.out.println(사용자이름 + age + "가 칼로 공격합니다."); // 출력문
	}
}
classextends 무기{ // 활 객체가 생성됨에 따라 class 활 생성
	void 작동 (String 사용자이름, int age) { // this.a무기.작동(이름, 나이);가 호출한 작동 메서드
		System.out.println(사용자이름 + age + "가 활로 공격합니다."); // 출력문
	}
}
profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글