반응형
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();
}
}
}
반응형
'IT > Programming' 카테고리의 다른 글
[JAVA] Package를 활용한 성적 관리 클래스 예제 (0) | 2023.04.21 |
---|---|
[JAVA] 출판사 책 관리 - 클래스 활용 예제 (0) | 2023.04.21 |
[JAVA] abstract class(추상클래스) 사용 예제 (0) | 2023.04.21 |
[JAVA] interface(인터페이스) 사용 예제 (0) | 2023.04.21 |
[JAVA] polymorphism(다형성), up&down casting 사용 예제 (0) | 2023.04.21 |