Java12

ONLY·2022년 11월 14일
0

Java_질의응답

목록 보기
12/14

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

Polymorphism(다형성)의 핵심 중 하나. 메소드 오버라이딩은 상속 관계에서 부모와 자식의 함수의 리턴타입, 함수이름, 파라미터가 모두 똑같고 구현 내용만 달리하는 것을 말한다.

오버라이딩이 된 함수를 호출하면 부모 함수의 주소를 자식 함수의 주소로 바꿔서 자식의 함수가 호출된다.

2. 오버로딩과 오버라이딩

1) 오버로딩

이름만 같은 다른 함수(파라미터 타입, 개수 다름)를 새롭게 생성

2) 오버라이딩

상속 관계에서 부모 함수와 똑같은 함수의 구현 내용만 다르게 수정

3. @Override

오버라이딩 하라고 좀 더 명확하게 개발자들에게 알려주는 것 컴파일시 에러 등을 발생시켜 경고나 확인을 하는 목적으로 사용한다. → 안전성을 위한 것

@Override 는 현재 메소드가 부모 클래스의 메소드를 오버라이드 한 것임을 컴파일러에게 명시하고, 부모 클래스에 해당하는 메소드가 없다면 에러를 발생시킨다.

4. instanceof

5. 문제01

다형성과 함수오버라이딩을 적용하여, 아래의 클래스들을
완성하시오.

Shape[] shape = {new Circle(10),new Triangle(10, 10),new Rectangle(10, 10)};
     for (Shape s : shape) {
         sumArea += s.getArea();
     }
interface Set{
    double getArea();
}

class CircleO implements Set{
    private int r;

    public CircleO(int r) {
        this.r = r;
    }
   
    public double getArea() {
        return r*r*Math.PI;
    }
}

class Triangle implements Set{
    private int width, height;

    public Triangle(int width,int height) {
        this.width = width;
        this.height = height;
    }
    @Override
    public double getArea() {
        return width*height / 2.0 ;
    }
}

class Rectangle implements Set{
    private int width,height;

    public Rectangle(int width, int height){
        this.width = width;
        this.height = height;
    }
    
    @Override
    public double getArea() {
        return width*height;
    }
}

public class Shape {

    public static void main(String[] args) {
        
        double sumArea = 0;
        Set[] shape = {new CircleO(10),new Triangle(10, 10),new Rectangle(10, 10)};

        for (Set s : shape) {
            sumArea += s.getArea();
        }
        System.out.println("고객님 넓이는" + sumArea + "입니다.");
    }
}

6. 문제02

아래를 프로그래밍 하시오.

겜블링 게임에 참여할 선수 숫자>>3
1번째 선수 이름>>영희
2번째 선수 이름>>철수
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개의 댓글