Java11

ONLY·2022년 11월 14일
0

Java_질의응답

목록 보기
11/14

1. is a 관계와 has a 관계

1) is a

(-는 -이다.) : 상속관계

노트북은 컴퓨터이다. (o)
전기 자동차는 자동차이다. (o)
ColorTV 는 TV이다. (o)

2) has a

(-는 -를 가지고있다.) : 포함관계 (상속불가)

class Computer{
	Cpu cpu;
	Mainboard mainboard;
	Memory memory;
	...
}

2. 다형성(polymorphism)

상속 관계에서 서로 관련된 많은 클래스들이 있을 때 '다형성'이라고 말한다.

is-a 의 상속 관계라면 그 객체는 다형성이다.

polymorphism(다형성)의 활용 방법: 가상 메소드 호출(virtual method invocation)

부모 = 자식 (wihtout 형변환)

3. 문제01

아래가 되지 않는 이유에 대하여 메모리 그림으로 설명하시오.

SmartPhone ph2 = new MobilePhone();

4. 문제02

다음을 만족하는 클래스 Employee를 작성하시오

- 클래스 Employee(직원)은 클래스 Regular(정규직)와 Temporary(비정규직)의 상위 클래스
- 필드: 이름, 나이, 주소, 부서, 월급 정보를 필드로 선언
- 생성자 : 이름, 나이, 주소, 부서를 지정하는 생성자 정의
- 메소드 printInfo() : 인자는 없고 자신의 필드 이름, 나이, 주소, 부서를 출력
- 클래스 Regular는 위에서 구현된 클래스 Employee의 하위 클래스
- 생성자 : 이름, 나이, 주소, 부서를 지정하는 상위 생성자 호출
- Setter : 월급 정보 필드를 지정
- 메소드 printInfo() : 인자는 없고 "정규직"이라는 정보와 월급을 출력
class EmployeeSet {
	
	private String name;
	private int age;
	private String addr;
	private String dept;
	int kyu;
	
	public EmployeeSet(String name, int age, String addr, String dept) {
		this.name = name;
		this.age = age;
		this.addr = addr;
		this.dept = dept;
	}
	
	protected void printInfo() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("주소 : " + addr);
		System.out.println("부서 : " + dept);
	}

}

class Regular extends EmployeeSet {
	
	public Regular(String name, int age, String addr, String dept) {
		super(name, age, addr, dept);
	}
	
	public void setKyu(int kyu) {
		super.kyu = kyu;
	}
	
	public void printInfo() {
		System.out.println("[정규직]");
		
		super.printInfo();
		
		System.out.println("월급 : " + super.kyu);
	}
}

class Temporary extends EmployeeSet {
	int workHour;
	int jiKyu;
	
	public Temporary(String name, int age, String addr, String dept) {
		super(name, age, addr, dept);
		jiKyu = 10000;
	}
	
	public void setWorkHours(int workHour) {
		this.workHour = workHour;
	}
	
	public void printInfo() {
		System.out.println("[계약직]");
		
		super.printInfo();
		System.out.println("급여 : " + (this.workHour * jiKyu));
	}
}

class Employee {
	
	public static void main(String[] args) {
		Regular bahk = new Regular("박온리", 26, "서울시 양천구", "IT3부");
		bahk.setKyu(10000);
		bahk.printInfo();
		
		Temporary hwang = new Temporary("황지훈", 30, "인천시 연수구", "영업부");
		hwang.setWorkHours(120);
		hwang.printInfo();
	}

}

5. 문제03

갬블링 게임을 만들어 보자.(Main 안에서 모든 로직을 처리하지 말고, class로 만들어서 활용해 보도록 합시다.)

두 사람이 게임을 진행한다. 
이들의 이름을 키보드로 입력 받으며 각 사람은 Person 클래스로 작성하라. 
그러므로 프로그램에는 2개의 Person 객체가 생성되어야 한다. 
두 사람은 번갈아 가면서 게임을 진행하는데 각 사람이 자기 차례에서 <Enter> 키를 입력하면, 
3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다. 
난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 숫자의 범위는 1~3까지로 한다.
import java.util.Scanner;

class Person {
    private String name;
    
    public String getName() {
		return name;
	}

	private int[] arrNum;

    public Person(String name) {
        this.name = name;
    }

    public boolean game() {
        arrNum = new int[3];
        
        for(int i=0; i<arrNum.length; i++) {
            arrNum[i] = (int)(Math.random()*3+1);	
        }
        
        System.out.print(arrNum[0]+" "+arrNum[1]+" "+arrNum[2]+" ");
        
        if((arrNum[0] == arrNum[1]) && (arrNum[1] == arrNum[2])) {
            return true;
        }else
            return false;
    }
}

class Gamble {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("참여 선수 숫자>>");
		int num = sc.nextInt();
		Person[] perArr = new Person[num];
		
		for (int i = 0; i < num; i++) {
			System.out.println((i+1) + "번째 선수 이름>>");
			String name = sc.next();
			perArr[i] = new Person(name);
		}
		
		String buffer = sc.nextLine();
		
		while(true) {
			for(int i = 0; i < num; i++) {
				System.out.println("[" + perArr[i].getName() + "] : <Enter>");
				buffer = sc.nextLine();//enter받아내는 거

				if (perArr[i].game()) {
					System.out.println("[" + perArr[i].getName() + "]님이 이겼습니다");
					return;
				}
				System.out.println("아쉽군요");
			}
		}
	}
}

0개의 댓글