30일 차 - 오버라이딩(Overriding) (23.02.07)

yvonne·2023년 2월 7일
0

📂Java

목록 보기
30/51
post-thumbnail

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

  • 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것
  • 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.

📌오버라이딩 조건

  • 자식 클래스에서 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 부모 클래스의 메소드와 모두 같아야 한다.
package inhertest;

class Cake {
	public void yummy() {
		System.out.println("Yummy Cake");
	}
}

class CheeseCake extends Cake {
	public void yummy() {
		System.out.println("Yummy Cheese Cake");
	}
}

public class PolyTest2 {
	public static void main(String[] args) {
		Cake c1 = new CheeseCake();
		CheeseCake c2 = new CheeseCake();

		c1.yummy();
		c2.yummy();
	}
}

  • 출력결과

  • Cake (부모) 클래스의 yummy 메소드를 CheeseCake (자식) 클래스의 yummy 메소드가 덮어씀







2. 오버로딩(Overloading) & 오버라이딩(Overriding)

  • 오버로딩(Overloading): 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

📌오버로딩의 조건: 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.



  • 오버라이딩(Overriding): - 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것

📌오버라이딩 조건: 자식 클래스에서 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 부모 클래스의 메소드와 모두 같아야 한다.





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

Fruit fAry[] = { new Grape(), new Apple(), new Pear() };
		for (Fruit f : fAry) {
			f.print();
		}
--------------------------------------
<<출력결과>>
나는 포도이다.
나는 사과이다.  	
나는 배이다.

class Fruit {
	public void print() {
		System.out.println("나는 ~이다. ");
	}

}

class Grape extends Fruit {
	public void print() {
		System.out.println("나는 포도이다.");
	}
}

class Apple extends Fruit {
	public void print() {
		System.out.println("나는 사과이다.");
	}
}

class Pear extends Fruit {
	public void print() {
		System.out.println("나는 배이다.");
	}
}

public class PolyTest2 {
	public static void main(String[] args) {

		Fruit fAry[] = { new Grape(), new Apple(), new Pear() };
		for (Fruit f : fAry) {
			f.print();
		}
	}
}
  • 출력결과




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

Shape[] shapeArr = {
    			new Circle2(10), new Rectangle(10,20),new Triangle(10,20)    			
    	};
    	
    	double sum = 0;
    	for (Shape shape : shapeArr) {
			sum += shape.getArea();
		}
    	System.out.println("총 면적은:" + sum);
    	
    	
    	shapeAllArea(shapeArr); //총 면적은:614.1592653589794

package inhertest;

class Shape2 {
	public double getArea() {
		return 0;
	}
}

class Circle7 extends Shape2 {
	double r;

	public Circle7(double r) {
		this.r = r;
	}

	public double getArea() {
		return r * r * Math.PI;
	}
}

class Rectangle7 extends Shape2 {
	double w, h;

	public Rectangle7(double w, double h) {
		this.w = w;
		this.h = h;
	}

	public double getArea() {
		return w * h;
	}
}

class Triangle7 extends Shape2 {
	double b, h;

	public Triangle7(double b, double h) {
		this.b = b;
		this.h = h;
	}

	public double getArea() {
		return (b * h) / 2.0;
	}
}

public class OverTest {

	public static void shapeAllArea2(Shape2[] sa) {
		double sum = 0;
		for (Shape2 shape : sa) {
			sum += shape.getArea();
		}
		System.out.println("총 면적은: " + sum);
	}

	public static void main(String[] args) {
		Shape2[] shapeArr = { new Circle7(10), new Rectangle7(10, 20), new Triangle7(10, 20) };

		double sum = 0;
		for (Shape2 shape : shapeArr) {
			sum += shape.getArea();
		}
		System.out.println("총 면적은: " + sum);

		shapeAllArea2(shapeArr); // 총 면적은:614.1592653589794

	}

}
  • 출력결과




5. 아래의 프로그램을 짜시오.

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

public class OverTest {

	public static void main(String[] args) {

		int[][] arr = new int[4][4];

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				arr[i][j] = (int) (Math.random() * 10) + 1;
			}
		}

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}

}
  • 출력결과
profile
개발 연습장

0개의 댓글