1. Is~A 관계와 Has~A 관계란?
· is~a관계: '..은 ..이다' 의미를 지니며, "노트북은 컴퓨터이다", "전기자동차는 차이다" 예시와 같이 상속 관계의 형태를 가진다.
· has~a 관계: "CPU와 mainboard는 컴퓨터를 구성한다" 예시와 같이 포함/구성 관계의 형태를 가진다.
(is~a 조금이라도 의심스럽다면 has a로 표현)
2. 다형성(Polymorphism)이란 무엇인가?
· 부모 = 자식(without 형변환), 부모 클래스는 자식 클래스를 참조하여 다형성 구현이 가능하다.
(쉽게 말해, 하나의 객체를 여러 가지 타입으로 선언하여 사용가능)
· ex) class A를 상속받는 class B, C, D 모두를 class A는 참조가능
3. 아래 예시와 같이 성립되지 않는 이유에 대하여 메모리 그림으로 설명하시오.
· SmartPhone ph1 = new MobilePhone(); 객체 생성이 불가하다.
why? 부모클래스에는 자식클래스의 함수와 변수가 존재하지 않기 때문에 참조할 수 없다.
· MobilePhone ph2 = new SmartPhone(); 객체 생성은 가능하지만 함수사용은 불가하다.
why? 메모리에 부모클래스가 먼저 저장된 후, 자식클래스가 저장되기 때문에 객체 생성까지는 가능하지만
ph2는 Moblie 타입이기 때문에 Moblie까지만 사용가능하다.(smatr 함수에 접근 불가)
4. 메소드 오버라이딩이란?
· 상속관계에서 리턴타입, 함수명, 파라미터가 동일한 경우 자식클래스에서 재정의하여 사용하는 것을
메소드 오버라이딩이라 일컬으며, 이 때 부모 클래스가 아닌 상속하는 자식클래스의 구현내용을 실행한다.
(오버라이딩은 자식, 후손 따름!! 외우기!! 자식의 실행내용을 출력)
5. 대결 프로그램을 작성하시오.
두 사람이 이름을 키보드로 입력 받으며 각 사람은 Person 클래스로 작성하라.
그러므로 프로그램에는 2개의 Person 객체가 생성되어야 한다. 두 사람은 번갈아 가면서 게임을 진행하는데 각 사람이
자기 차례에서 <Enter> 키를 입력하면, 3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다.
난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 숫자의 범위는 1~3까지로 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/*
1번째 선수 이름>>수희
2번째 선수 이름>>연수
[수희]:
3 1 1 아쉽군요!
[연수]:
3 1 3 아쉽군요!
[수희]:
2 2 1 아쉽군요!
[연수]:
1 1 2 아쉽군요!
[수희]:
3 3 3 수희님이 이겼습니다! */
class Person {
public String name;
private int num1, num2, num3;
public Person(String name) {
this.name = name;
}
public boolean getPlay() {
num1 = (int)(Math.random() * 3) + 1;
num2 = (int)(Math.random() * 3) + 1;
num3 = (int)(Math.random() * 3) + 1;
System.out.print("\t" + num1 + " " + num2 + " " + num3 + " ");
if((num1==num2)&&(num2==num3)) {
return true;
}else {
return false;
}
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class Personmain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("1번째 선수 이름 >> " );
Person person1 = new Person(sc.next());
System.out.print("2번째 선수 이름 >> " );
Person person2 = new Person(sc.next());
while(true) {
System.out.println("[" + person1.name + "]:");
sc.nextLine();
if(person1.getPlay()){
System.out.println("승리입니다!!");
break;
}else {
System.out.println("아쉽군요");
}
System.out.println("[" + person2.name + "]:");
sc.nextLine();
if(person2.getPlay()){
System.out.println("승리입니다!!");
break;
}else {
System.out.println("아쉽군요");
}
}
}
}
|
cs |
6. 문제 5번 게임을 n명이 하도록 수정하라.
실행 예시와 같이 게임에 참여하는 선수의 수를 입력받고 각 선수의 이름을 입력받도록 수정하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/*
겜블링 게임에 참여할 선수 숫자>>3
1번째 선수 이름>>황
2번째 선수 이름>>이
3번째 선수 이름>>김
[황]:
2 3 3 아쉽군요!
[이]:
1 2 2 아쉽군요!
[김]:
2 2 3 아쉽군요!
[황]:
3 2 2 아쉽군요!
[이]:
1 1 3 아쉽군요!
[김]:
2 2 1 아쉽군요!
[황]:
2 2 2 황님이 이겼습니다! */
//난수 생성은 10번과 동일
class Personmain2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("겜블링 게임에 참여할 선수 숫자>> ");
int num = sc.nextInt();
Person2[] person = new Person2[num];
for(int i = 0; i < person.length; i++) {
System.out.print((i+1) + "번째 선수 이름>> ");
person[i] = new Person2(sc.next());
}
while(true) {
for(int j = 0; j < person.length; j++) {
sc.nextLine();
System.out.println("[" + person[j].name + "]: ");
if(person[j].getPlay()){
System.out.println("승리입니다!!");
break;
}else {
System.out.println("아쉽군요");
}
}
}
}
}
|
cs |
7. 다음을 만족하는 클래스 Employee를 작성하시오
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Employee{
private String name;
private int age;
private String address;
private String team;
private int pay;
public Employee1(String name, int age, String address, String team){
this.name = name;
this.age = age;
this.address = address;
this.team = team;
}
public int getPay(){
return pay;
}
public void setPay(int pay){
this.pay = pay;
}
public void printInfo() {
System.out.println("이름:" + name + "\n나이:" + age + "\n주소:" + address + "\n부서:" + team);
}
}
|
cs |
1
2
3
4
5
6
|
class Employeemain{
public static void main(String[] args){
Employee1 employee = new Employee1("수정", 20, "서울", "인사");
employee.printInfo();
}
}
|
cs |
8. 다음을 만족하는 클래스 Regular를 작성하시오.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
|
class Regular extends Employee1{
private int setter;
public Regular(String name, int age, String address, String team, int setter) {
super(name, age, address, team);
this.setter = setter;
}
public void printInfo(){
super.printInfo();
System.out.println("정규직" + setter);
}
}
|
cs |
1
2
3
4
5
6
|
class Employeemain{
public static void main(String[] args){
Regular regular = new Regular("수정", 20, "서울", "인사", 500);
regular.printInfo();
}
}
|
cs |
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/15_추상메소드, 예외처리 (0) | 2021.01.31 |
---|---|
면접족보 20/12/14_인터페이스, 추상클래스 개념 (0) | 2021.01.31 |
면접족보 20/12/10_상속 (0) | 2021.01.30 |
면접족보 20/12/09_배열 (0) | 2021.01.30 |
면접족보 20/12/08_String 클래스의 메소드 (0) | 2021.01.24 |