IT/Java

자바 다형성, 도형 예제

노마드오브 2018. 7. 18. 00:24

파일명 : Test3.java



package com.test;


// 다형성 : 동일한 코드로 다른 기능 실행


// 클래스 Shape 도형  // 부모

   // 멤버변수 double area  // 면적 저장공간

   // 메소드 getArea()  return area  // 면적구해서 리턴하는 메소드

class Shape {

double area;

double getArea() {

return area;

}

}

// 클래스 Circle 원   // 상속 Shape

   // 멤버변수 정수형 r=5  // 반지름

   // 메소드 오버라이딩.  원면적 구해서 리턴하는 메소드

class Circle extends Shape {

int r=5;

@Override

double getArea() {

area = r * r * 3.14;

return area;

}

}

// 클래스 Rectangle 사각형   // 상속 Shape

   // 멤버변수 정수형  w=10  정수형 h=10

   // 메소드 오버라이딩.  사각형면적 구해서 리턴하는 메소드

class Rectangle extends Shape {

int w = 10;  // width 폭. 가로

int h = 10;  // height 높이. 세로

@Override

double getArea() {

area = w * h;

return area;

}

}

//클래스 Triangle 삼각형   // 상속 Shape

// 멤버변수 정수형  w=10  정수형 h=10

// 메소드 오버라이딩.  삼각형면적 구해서 리턴하는 메소드

class Triangle extends Shape {

int w = 10;

int h = 10;

@Override

double getArea() {

area = w * h / 2.0;

return area;

}

}


public class Test3 {


public static void main(String[] args) {

// 원 객체생성. 원의면적 출력 "면적: "

Circle c = new Circle(); // 정적바인딩만 일어남

System.out.println("면적: " + c.getArea());


// 사각형 객체생성. 사각형 면적 출력 "면적: "

Rectangle r = new Rectangle(); // 정적바인딩만 일어남

System.out.println("면적: " + r.getArea());


// 삼각형 객체생성. 삼각형 면적 출력 "면적: "

Triangle t = new Triangle(); // 정적바인딩만 일어남

System.out.println("면적: " + t.getArea());

System.out.println("=============");


// 업캐스팅  다형성

Shape s; 

s = new Circle();

System.out.println("면적: " + s.getArea()); // 동적바인딩이 일어남!

s = new Rectangle();

System.out.println("면적: " + s.getArea());

s = new Triangle();

System.out.println("면적: " + s.getArea());

System.out.println("=============");

prnShapeArea(new Circle());

prnShapeArea(new Rectangle());

prnShapeArea(new Triangle());

System.out.println("=============");


Shape[] arrShape = new Shape[3];

arrShape[0] = new Circle();

arrShape[1] = new Rectangle();

arrShape[2] = new Triangle();

for (Shape sh : arrShape) {

System.out.println("면적: " + sh.getArea());

}

} // main()의 끝


// 매개변수  Shape shape = new Circle();

static void prnShapeArea(Shape shape) {

System.out.println("면적: " + shape.getArea());

}


}