java 16

산야(Sanya)·2024년 1월 18일

java 족보

목록 보기
17/28

1.메소드 오버라이딩(Overriding) 이란?

  • 메소드 오버라이딩은 상속 관계에 있는 클래스에서 부모 클래스의 메소드를 자식 클래스에서 동일한 시그니처(메소드 이름, 매개변수 목록, 반환 타입)로 다시 정의하는 것을 말합니다.
  • 자식 클래스에서 부모 클래스의 메소드를 재정의하여 자식 클래스의 특정 동작으로 변경할 수 있습니다.
  • '@Override' 어노테이션을 사용하여 오버라이딩된 메소드임을 명시할 수 있습니다.

2.다형성(polymorphism)이란 무엇인가?

  • 다형성은 객체 지향 프로그래밍에서 하나의 코드가 여러 가지 형태를 가질 수 있는 특성을 말합니다.
  • 자바에서 다형성은 주로 두 가지로 나눌 수 있습니다.
    • 컴파일 시 다형성(Compile-time Polymorphism): 메소드 오버로딩을 통해 구현되며, 같은 이름의 메소드가 다양한 매개변수를 받아들이는 것을 의미합니다.
    • 런타임 다형성(Runtime Polymorphism): 메소드 오버라이딩을 통해 구현되며, 상속 관계에서 동일한 메소드 호출 시 객체의 실제 타입에 따라 실행 결과가 달라지는 것을 의미합니다.

3. 아래가 출력 되도록 하시오.

참고 - 화폐 매수 구하기 - 배열 이용해 보세요.

	public static void main() {
		MoneyArr mArr = new MoneyArr(126000);
		mArr.show();

	}
class MoneyArr {
    private int totalAmount;

    public MoneyArr(int totalAmount) {
        this.totalAmount = totalAmount;
    }

    public void show() {
        int[] denominations = { 50000, 10000, 5000, 1000, 500, 100, 50, 10 };
        int[] counts = new int[denominations.length];

        int remainingAmount = totalAmount;

        for (int i = 0; i < denominations.length; i++) {
            counts[i] = remainingAmount / denominations[i];
            remainingAmount %= denominations[i];
        }

        for (int i = 0; i < denominations.length; i++) {
            System.out.println(denominations[i] + "원" + counts[i] + "개");
        }
    }
}

public class override2 {
    public static void main(String[] args) {
        MoneyArr mArr = new MoneyArr(126000);
        mArr.show();
    }
}

=================출력=================

50000원2개
10000원2개
5000원1개
1000원1개
500원0개
100원0개
50원0개
10원0개

4. instanceof 연산자에 대하여 설명하시오.

'instanceof' 연산자는 객체가 특정 클래스의 인스턴스인지를 확인하는 데 사용됩니다. 이 연산자는 'boolean' 값을 반환하며, 객체가 지정된 클래스의 인스턴스이면 'true' 를 반환하고, 그렇지 않으면 'false' 를 반환합니다.

예를 들어:

class Animal {}

class Dog extends Animal {}

public class InstanceOfExample {
    public static void main(String[] args) {
        Animal animal = new Dog();

        // 사용법: 객체 instanceof 클래스
        if (animal instanceof Dog) {
            System.out.println("animal은 Dog 클래스의 인스턴스입니다.");
        } else {
            System.out.println("animal은 Dog 클래스의 인스턴스가 아닙니다.");
        }
    }
}

5. 갬블링 게임을 만들어 보자.

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

import java.util.Random;
import java.util.Scanner;

class Person {
    private String name;

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

    public String getName() {
        return name;
    }

    public void playGame() {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        System.out.println(getName() + "님의 차례. <Enter> 키를 누르세요.");
        scanner.nextLine();

        int num1 = random.nextInt(3) + 1;
        int num2 = random.nextInt(3) + 1;
        int num3 = random.nextInt(3) + 1;

        System.out.println("나온 숫자: " + num1 + " " + num2 + " " + num3);

        if (num1 == num2 && num2 == num3) {
            System.out.println(getName() + "님이 이겼습니다!");
        } else {
            System.out.println(getName() + "님이 졌습니다.");
        }
    }
}

public class GamblingGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 참가자의 이름을 입력하세요: ");
        String name1 = scanner.nextLine();

        System.out.print("두 번째 참가자의 이름을 입력하세요: ");
        String name2 = scanner.nextLine();

        Person person1 = new Person(name1);
        Person person2 = new Person(name2);

        while (true) {
            person1.playGame();
            person2.playGame();

            System.out.print("계속 진행하시겠습니까? (Y/N): ");
            String answer = scanner.nextLine();

            if (!answer.equalsIgnoreCase("Y")) {
                System.out.println("게임을 종료합니다.");
                break;
            }
        }

        scanner.close();
    }
}

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

(7번문제부터는 이것과 관련된 문제입니다).

  • 클래스 Employee(직원)은 클래스 Regular(정규직)와 Temporary(비정규직)의 상위 클래스

  • 필드: 이름, 나이, 주소, 부서, 월급 정보를 필드로 선언

  • 생성자 : 이름, 나이, 주소, 부서를 지정하는 생성자 정의

  • 메소드 printInfo() : 인자는 없고 자신의 필드 이름, 나이, 주소, 부서를 출력

// Employee.java
public class Employee {
    private String name;
    private int age;
    private String address;
    private String department;

    public Employee(String name, int age, String address, String department) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.department = department;
    }

    public void printInfo() {
        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
        System.out.println("주소: " + address);
        System.out.println("부서: " + department);
    }
}

7. 다음을 만족하는 클래스 Regular를 작성하시오. Series_02 (필수)

• 클래스 Regular는 위에서 구현된 클래스 Employee의 하위 클래스
• 생성자 : 이름, 나이, 주소, 부서를 지정하는 상위 생성자 호출
• Setter : 월급 정보 필드를 지정
• 메소드 printInfo() : 인자는 없고 "정규직"이라는 정보와 월급을 출력

// Regular.java
public class Regular extends Employee {
    private int salary;

    public Regular(String name, int age, String address, String department) {
        super(name, age, address, department);
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public void printInfo() {
        super.printInfo();
        System.out.println("직급: 정규직");
        System.out.println("월급: " + salary);
    }
}
profile
개발일지

0개의 댓글