SW공부 29일차

Guryena·2023년 2월 7일
0

CS

목록 보기
22/34

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

  • 상속 관계에서 함수를 만들 때 부모, 자식 함수에서 다른건 다 똑같고, 바디만 달리했을 때, 자식의 함수가 부모의 함수를 덮어쓴다.

2. 오버로딩 vs 오버라이딩 에 대하여 설명하시오.

  • 오버로딩(Overloading)
    사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 하지만 자바에서는 하나의 메소드 이름으로 여러 기능을 구현하기 때문에 '과적하다.'라는 뜻의 이름을 붙여준 것으로 보인다.
  • 오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
  • 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른 것은 오버로딩을 할 수 없다는 것이다.
  • 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.
  • 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.

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

결과
나는 포도이다.
나는 사과이다.
나는 배이다.

public static void main(String[] args) {
		Fruit[] fruit = {new Grape("포도"), new Apple("사과"), new 		 Ship("배")}; 
		Fruit.getFruit(fruit);
}
public class Fruit {
	public String getName() {
		return null;
	}
	
	public static void getFruit(Fruit[] fruit) {
		String str=null;
		for (int i = 0; i < fruit.length; i++) {
			str=fruit[i].getName();
			System.out.println("나는 " + str+"입니다.");
		}
	}
}
public class Apple extends Fruit {
	private String name;

	public Apple(String name) {
		this.name = name;
	}
	@Override
	public String getName() {
		return name;
	}
}
public class Grape extends Fruit {
	private String name;

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

	@Override
	public String getName() {
		return name;
	}

}
public class Ship extends Fruit {
	private String name;

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

	@Override
	public String getName() {
		return name;
	}
}

4. 아래를 main 함수에 넣고 돌아 가도록 하시오.

		//declaration
		Shape[] shapeArr = { new Circle(2), 
				new Rectangle(2, 2), new Triangle(2, 2) };
		//logic
		double sum = 0;
		for (Shape shape : shapeArr) {
			sum += shape.getArea();
		}
		System.out.println(sum);
		
		double sum1 = 0;
		for (int i = 0; i < shapeArr.length; i++) {
			sum1 += shapeArr[i].getArea();
		}
		System.out.println(sum1);

		System.out.println(Shape.shapeAllArea(shapeArr));
        //총 면적은:614.1592653589794
public class Circle extends Shape {
	private double radius;
	private double area;

	public Circle(double r) {
		this.radius = r;
	}

	@Override
	public double getArea() {
		area = Math.pow(radius, 2) * Math.PI;
		return area;
	}

}
public class Rectangle extends Shape {
	private double base;
	private double height;
	private double area;

	public Rectangle(double base, double height) {
		this.base = base;
		this.height = height;
	}

	@Override
	public double getArea() {
		area = base * height;
		return area;
	}

}
public class Triangle extends Shape {
	private double base;
	private double height;
	private double area;

	public Triangle(double base, double height) {
		this.base = base;
		this.height = height;
	}

	@Override
	public double getArea() {
		area = (base * height) / 2;
		return area;
	}

}

4.아래의 프로그램을 짜시오. (필수)

4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를
랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.

8 6 1 1
7 3 6 9
4 5 3 7
9 6 3 1
import java.util.Random;

public class RandomARR {

	public static void main(String[] args) {
//		4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 
//		랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.
		int[][] arr = new int[4][4];
		Random random = new Random();
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = random.nextInt(11);
				System.out.print(arr[i][j]+ " ");
			}System.out.println();
		}
	}

}

0개의 댓글