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
|
package _0922_B;
public class Main {
public static void main(String[] args) {
//클래스를 생성할 때, Animal > Animal로 형변환(실제로는 하지 않음)
Animal animal = new Animal();
//클래스를 생성할 때, Dog(자식 객체)를 Amimal(부모 객체)로 형변환을 하여 생성한다.
//실제 인스턴스는 Dog이지만, Animal로 취급
Animal dog = new Dog();
//클래스를 생성할 때, Cat(자식 객체)를 Animal(부모 객체)로 형변환을 하여 생성한다.
//실제 인스턴스는 Cat이지만, Animal로 취급
Animal cat = new Cat();
//실제 객체의 인스턴스는 각각 Animal, Dog, Cat이지만
//위 생성자에서는 Animal로 """취급""" 한다.
//실제 프로그램 내에서는 바인딩으로 인해 실제 인스턴스로 작동함
//이런 상속관계간 형변환을 사용하는 이유는 최상위 클래스를 이용해 하나의 타입으로 만든 배열,리스트 등 Container을 이용하여
//하나의 for문으로 접근 및 제어 할 수 있기 때문이다.
speak(animal);
speak(dog);
speak(cat);
}
private static void speak(Animal target)
{
//Animal 클래스 내의 함수 Speak가 실행되지만
//각 클래스의 실제 인스턴스인 자식의 함수로 오버라이딩 되어 실행되게 된다.
target.Speak();
}
}
|
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
|
package _0922_B;
public class Animal
{
public void Speak()
{
System.out.println("Animal Speak");
}
}
class Cat extends Animal
{
public void Speak()
{
System.out.println("Meow");
}
}
class Dog extends Animal
{
public void Speak()
{
System.out.println("Woof");
}
}
|
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package _0922_C;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
FriendInfoHandler handler = new FriendInfoHandler();
while (true) {
System.out.println("*** 메뉴 선택 ***");
System.out.println("1. 고교 친구 저장");
System.out.println("2. 대학 친구 저장");
System.out.println("3. 전체 정보 출력");
System.out.println("4. 기본 정보 출력");
System.out.println("5. 프로그램 종료");
System.out.print("선택>> ");
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();
switch (choice) {
case 1:
case 2:
handler.AddFriend(choice);
break;
case 3:
handler.ShowAllData();
break;
case 4:
handler.ShowAllSimpleData();
break;
case 5:
System.out.println("프로그램을 종료합니다.");
return;
}
System.out.println("");
}
}
}
|
cs |
Main 함수가 있는곳. Handler을 생성하고 Handler에 접근하여 프로그램을 동작시킨다.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package _0922_C;
import java.util.ArrayList;
import java.util.Scanner;
public class FriendInfoHandler {
private ArrayList<HighFriend> mHighFriends;
private ArrayList<UnivFriend> mUnivFriends;
/// 생성자
public FriendInfoHandler() {
mHighFriends = new ArrayList<HighFriend>();
mUnivFriends = new ArrayList<UnivFriend>();
}
/// Friend 추가
public void AddFriend(int choice) {
String name, phoneNum, addr, job, major;
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화 : ");
phoneNum = sc.nextLine();
System.out.print("주소 : ");
addr = sc.nextLine();
if (choice == 1) {
System.out.print("직업 : ");
job = sc.nextLine();
mHighFriends.add(new HighFriend(name, phoneNum, addr, job));
} else// if(choice==2)
{
System.out.print("학과 : ");
major = sc.nextLine();
mUnivFriends.add(new UnivFriend(name, phoneNum, addr, major));
}
System.out.println("입력 완료! \n");
}
public void ShowAllData() {
for (int i = 0; i < mHighFriends.size(); ++i) {
mHighFriends.get(i).ShowData();
}
System.out.println("");
for (int i = 0; i < mUnivFriends.size(); ++i) {
mUnivFriends.get(i).ShowData();
}
}
public void ShowAllSimpleData() {
for (int i = 0; i < mHighFriends.size(); ++i) {
mHighFriends.get(i).ShowBasicInfo();
}
System.out.println("");
for (int i = 0; i < mUnivFriends.size(); ++i) {
mUnivFriends.get(i).ShowBasicInfo();
}
}
}
|
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
30
31
32
|
package _0922_C;
public class HighFriend {
private String mName; //이름
private String mPhoneNum; //전화번호
private String mAddress; //주
private String mWork; //직업
public HighFriend(String name, String phoneNum, String address, String work)
{
this.mName = name;
this.mPhoneNum = phoneNum;
this.mAddress = address;
this.mWork = work;
}
public void ShowData()
{
System.out.println("이름: " + mName);
System.out.println("전화: " + mPhoneNum);
System.out.println("주소: " + mAddress);
System.out.println("직업: " + mWork);
}
public void ShowBasicInfo()
{
System.out.println("이름: " + mName);
System.out.println("전화: " + mPhoneNum);
}
}
|
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
30
31
32
33
|
package _0922_C;
public class UnivFriend {
private String mName; //이름
private String mPhoneNum; //전화번호
private String mAddress; //주
private String mMajor; //전공
public UnivFriend(String name, String phoneNum, String address, String major)
{
this.mName = name;
this.mPhoneNum = phoneNum;
this.mAddress = address;
this.mMajor = major;
}
public void ShowData()
{
System.out.println("이름: " + mName);
System.out.println("전화: " + mPhoneNum);
System.out.println("주소: " + mAddress);
System.out.println("전공: " + mMajor);
}
public void ShowBasicInfo()
{
System.out.println("이름: " + mName);
System.out.println("전화: " + mPhoneNum);
System.out.println("전공: " + mMajor);
}
}
|
cs |
'기타 > univ. projects' 카테고리의 다른 글
[유니티] 게임엔진응용실습 Unit4 프로젝트 - Airplane Shooting (Space Invader) (0) | 2022.10.22 |
---|---|
[자바] 멀티미디어자바프로젝트II ch.05 연습문제 (0) | 2022.10.06 |
[유니티] 게임엔진응용실습 Unit3 프로젝트 - Space Flight (1) | 2022.09.20 |
[유니티] 게임엔진응용실습 Unit2 프로젝트 - 장애물 코스 피하기 게임 (0) | 2022.09.13 |
[유니티] 게임엔진응용실습 Unit1 프로젝트 (Unity 기초) (0) | 2022.09.13 |