IT/Programming / / 2023. 4. 21. 17:30

[JAVA] method override(재정의) 사용 예제

반응형
package dayday11;
/*
 * 메소드 오버라이드 (재정의)
 * 1. 부모가 물려준 메소드를 몸통만 (중괄호 영역) 자식이 수정해서 쓰는 것
 *  - 주의 점 : 메소드 이름 같다. 반환 자료형 같다. 매개변수 자료형 같다. 내용물만 다르다. 상속개념
 *  - 클래스의 크기를 줄이기 위해,
 *  - 다형성을 위해
 *  오버 로딩 - 매개변수, 반환 자료형 차이, 이름 같다. 함수개념..
 *  
 *  - 부모 메소드의 노출범위를
 *    자식 클래스가 오버라이드할때,
 *    넓힐 수는 있지만 좁힐 수는 없다.
 *   ex_ 부모 : public -> 자식 : private XX
 *   	 부모 : private -> 자식 : public OO
 *  - 참고 : 오버라이드 어노테이션(annotation)
 *    - Annotation?  JVM에게 건네는 주석
 *      단어 앞에  @
 *      (자식클래스에서 메소드 선언 위에) @Override
 *      개발자의 실수를 줄일 때 사용 - 오버로딩하면 에러뜸.
 *  
 */

/*
 * 다음 shape 클래스를 상속받은
 * circle, rectangle, triangle 클래스를 선언하여
 * getArea() 각 도형의 넓이를 리턴하도록 오버라이드 하세요
 * 1) circle 필드 : 원주율(상수), 반지름, 
 * 2) rectagle 필드 : 밑변, 높이
 * 3) triangle 필드 : 밑변, 높이
 * (생성자를 만들면 편함)
 * 
 */
//class Shape {
//	String name = "도형";
//	Shape(String name){
//		this.name = name;
//	}
//	public double getArea(){
//		return 0.0;
//	}
//	public void showMessage(){
//		System.out.println(name + "의 넓이 : " + getArea());
//	}
//}

class Circle extends Shape{
	static final double PI = 3.141592;
	int halfradi;
	Circle(String name,int halfradi) {
		super(name);
		this.halfradi = halfradi >= 0 ? halfradi : 0 ;
	}

	@Override
	public double getArea(){
		return halfradi*halfradi*PI;
	}
	@Override
	public void showMessage(){
		System.out.println(name + "의 넓이 : " + getArea());
	}
}
class Rectangle extends Shape{
	int dR;
	int hR;
	Rectangle(String name, int dR, int hR){
		super(name);
		this.dR = dR >= 0 ? dR : 0;
		this.hR = hR >= 0 ? hR : 0;
	}
	@Override
	public double getArea(){
		return dR*hR;
	}

	@Override
	public void showMessage(){
		System.out.println(name + "의 넓이 : " + getArea());
	}
}
class Triangle extends Shape{
	int dR;
	int hR;

	Triangle(String name, int dR,int hR){
		super(name);
		this.dR = dR >= 0 ? dR : 0;
		this.hR = hR >= 0 ? hR : 0;
	}

	@Override
	public double getArea(){
		return (dR*hR)/2;
	}
	
	@Override
	public void showMessage(){
		System.out.println(name + "의 넓이 : " + getArea());
	}
}
public class test02 {
	public static void main(String[] args) {
		Circle C = new Circle("원",5);
		Rectangle R = new Rectangle("사각형",3,5);
		Triangle T = new Triangle("삼각형",5,5);
		C.showMessage();
		R.showMessage();
		T.showMessage();
		//배열 - > 같은 자료형 끼리 모아둔 서랍장
		// Shape모양의 배열을 통해 여러 하위 클래스 저장 가능
		Shape[] sh = new Shape[4];
		sh[0] = new Circle("원",4);
		sh[1] = new Rectangle("사각형",4,4);
		sh[2] = new Rectangle("사각형",5,4);
		sh[3] = new Triangle("삼각형",6,10);
		
		System.out.println("\n");
		for(Shape tmp : sh){
			tmp.showMessage();
		}
	}
	
	
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유