JAVA를 잡아라!...
JAVA_추상클래스_#2_Pokemon 본문
문제
//포켓몬 클래스
//전기 클래스
//피카츄 클래스
//라이츄 클래스
main(){
피카츄 p1 = new 피카츄(); //피카츄 Lv.5
피카츄 p2 = new 피카츄(11); //피카츄 Lv.11
라이츄 p3 = new 라이츄(); //라이츄 Lv.5
p1.attack(); //백만볼트!
p3.attack(); //백만볼트!
p1.hello(); //피카피카
p3.hello(); //라이라이
}
// 추상 클래스는 몇개일까요?
// 모든 전기 클래스 타입들의 attack()은 백만볼트! 입니다.
// 각각의 포켓몬들은 울음소리가 다릅니다.
- 멤버변수(속성) 유추
- 생성자 유추
- 생성자는 멤버변수 초기화하는 역할! 무조건 모든 멤버변수 초기화!
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
한글코딩
abstract class 포켓몬
String name;
String type;
int lv;
포켓몬() {
this(5);
}
포켓몬(String name, String type, int lv)
this.name = name; // "포켓몬"에서 결정 X, 하위에서 할거임
this.type = type; // "포켓몬"에서 결정 X, 하위에서 할거임
this.lv = lv;
abstract void attack();
abstract void hello();
class 전기 extends 포켓몬
전기(String name){
this(name, 5);
}
전기(String name, int lv){
super(name, "전기", lv);
}
void attack(){
syso("백만볼트!")
}
class 피카츄 extends 전기
피카츄(){
this(5);
}
피카츄(int lv){
super("피카츄", lv);
}
void hello();{
syso("피카피카")
}
class 라이츄 extends 전기
라이츄(){
this(5);
}
라이츄(int lv){
super("라이츄", lv);
}
void hello();{
syso("라이라이")
}
코드
package class01;
abstract class Pokemon {
//1. 멤버변수(속성): 포켓몬은 이름, 타입, 레벨을 가짐
String name;
String type;
int lv;
//2. 생성자: 이름, 타입, 레벨은 하위클래스에서 해줄거야!
Pokemon(String name, String type, int lv) {
this.name = name;
this.type = type;
this.lv = lv;
}
//4. printInfo는 오버라이딩을 강제할필요 X, 모든 포켓몬이 출력하니까!
void printInfo() {
System.out.println("이름:" + this.name + ", Lv." + this.lv);
}
//3. 추상메소드 생성
abstract void attack();
abstract void hello();
}
abstract class Elec extends Pokemon {
//1. 생성자: 이름, 레벨은 하위클래스에서 해줄거야! (타입 책임지기)
Elec(String name, int lv) {
super(name, "전기", lv);
}
//2. 메소드오버라이딩 : 강제로 만들게 돼있음. 안만들면 Elec에 빨간밑줄 생김 ㅠㅠ
@Override
void attack() {
System.out.println("백만볼트!");
}
}
class Pikachu extends Elec {
//2. 생성자
Pikachu() {
this(5);
}
//1. 생성자: 레벨만 받아옴 (이름 책임지기)
Pikachu(int lv) {
super("피카츄",lv);
}
@Override
void hello() {
System.out.println("피카피카(0^___^0)");
}
}
class Liechu extends Elec {
//2. 생성자
Liechu() {
this(5);
}
//1. 생성자: 레벨만 받아옴 (이름 책임지기)
Liechu(int lv) {
super("라이츄",lv);
}
@Override
void hello() {
System.out.println("라이라이(**^___^**)");
}
}
public class Test04 {
public static void main(String[] args) {
Pikachu p1 = new Pikachu();
Pikachu p2 = new Pikachu(10);
Liechu p3 = new Liechu(13);
p1.printInfo();
p1.hello();
p1.attack();
p2.printInfo();
p2.hello();
p2.attack();
p3.printInfo();
p3.hello();
p3.attack();
}
}
출력
이름:피카츄, Lv.5
피카피카(0^___^0)
백만볼트!
이름:피카츄, Lv.10
피카피카(0^___^0)
백만볼트!
이름:라이츄, Lv.13
라이라이(**^___^**)
백만볼트!
'JAVA > JAVA_복습문제' 카테고리의 다른 글
JAVA_배열리스트_#1_Student (0) | 2023.12.07 |
---|---|
JAVA_인터페이스_#1_TV (+ 싱글톤 패턴) (2) | 2023.12.07 |
JAVA_추상클래스_#1_Shape (1) | 2023.12.06 |
JAVA_리턴타입 boolean인 메소드 연습_#1 (2) | 2023.12.05 |
JAVA_상속_#3_Person (0) | 2023.12.03 |