java - 다형성 예제 shape

imjingu·2023년 8월 22일
0

개발공부

목록 보기
406/481
package chapter20230822.test10;

class Shape {
	/*
	 각 도형들을 2차원 공간에서 도형의 위치를 나타내는 기준점 (x,y) 를 가짐
	 이것은 모든 도형에 공통적인 속성이므로 부모 클래스인 Shape에 저장
	 */
	protected int x, y;
	public void draw() {
		System.out.println("Shape Draw");
	}
}

class Rectangle extends Shape {
	/*
	 Shape 를 상속받아서 사각형을 나타내는 클래스
	 추가적으로 width, heigth변수를 가짐
	 */
	public int width, height;
	
	@Override
	public void draw() {
		System.out.println("Rectangle Draw");
	}
}

class Triangle extends Shape {
	public int base, height;
	
	@Override
	public void draw() {
		System.out.println("Triangle Draw");
	}
}

class Circle extends Shape {
	public int radius;
	
	@Override
	public void draw() {
		System.out.println("Circle Draw");
	}
}



public class test01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Shape shape = new Rectangle(); // Rectangle의 객체를 Shape형 변수에서 참조
		shape.draw();
		
		// Shape형 클래스의 변수에는 접근 가능 , Shape안에는 x,y가 있기때문
		shape.x = 0;
		shape.y = 0;
		
		// 컴파일 오류, Shape형의 참조 변수로는 Rectangle의 클래스의 변수와 메서드에는 접근이 안됨
		// shape.width = 0;
		
		
	}

}

package chapter20230822.test10;

public class test02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Shape[] shapes = new Shape[3]; // Shape 객체 배열 선언
		
		// 다형성에 의해 Shape를 상속받는 모든 클래스 객체를 저장
		// 다른 클래스이지만 같은 부모 클래스를 가지고 있어서 배열로 저장 가능
		shapes[0] = new Rectangle();
		shapes[1] = new Triangle();
		shapes[2] = new Circle();
		
		for(int i = 0; i < shapes.length; i++) {
			shapes[i].draw(); // 서로 다른 draw() 메서드가 실행
		}
		/*
		 Rectangle Draw
		 Triangle Draw
		 Circle Draw
		 */
	}

}

package chapter20230822.test10;

public class test03 {
	public static void print(Shape shape) {
		// Shape shape 매개변수로 Shape에서 파생된 모든 클래스의 객체를 받을 수 있음
		System.out.println("x=" + shape.x + " y=" + shape.y);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Rectangle shape1 = new Rectangle();
		Triangle shape2 = new Triangle();
		Circle shape3 = new Circle();
		
		print(shape1);
		print(shape2);
		print(shape3);
	}

}

0개의 댓글