본문 바로가기
study/Java

[Java] 23. 추상클래스 (abstract)

by 금이패런츠 2022. 3. 21.
728x90
반응형
package chap7;
/*
 * 추상클래스
 * 1. 추상메서드를 메법로 가질 수 있는 클래스
 * 2. abstract 예약어로 구현함
 * 3. 객체화 불가.
 *  => 상속을 통해서 자손클래스의 객체화를 통해 객체화 가능.
 * 4. 그외는 일반클래스와 동일함 (생성자, 멤버변수, 멤버메서드, 상속, .....)
 * 
 * 추상메서드 : 메서드의 선언부만 존재하는 메서드. 구현부가 없다
 *  => 자손클래스에서 반드시 오버라이딩 해야함.
 *  
 * shape : 도형클래스
 *  멤버변수 : 도형의 종류 (type)
 *  멤버메서드 : 넓이 area()
 *            둘레 length()
 */
abstract class Shape { //추상클래스
	String type;
	Shape(String type) {
		this.type = type;
	}
	abstract double area(); //추상메서드
	abstract double length(); //추상메서드
}
class Circle extends Shape {
	int r;
	Circle(int r) {
		super("원");
		this.r = r;
	}
	double area() { 
		return r * r * Math.PI; 
	}
	double length() {
		return 2 * r * Math.PI; 
	}
	public String toString() {
		return type + "반지름:" + r + ", 넓이:" + area() + ", 둘레:" + length();
	}
}
//Rectangle클래스 구현하기
class Rectangle extends Shape {
	int w,h;
	Rectangle(int w, int h) {
		super("사각형");
		this.w = w;
		this.h = h;
	}
	@Override
	double area() {
		return w*h;
	}
	@Override
	double length() {
		return 2*(w+h);
	}
	public String toString() {
		return type + "가로" + w + ", 세로:" + h + ", 넓이:" + area() + ", 둘레:" + length();
	}
}	
public class ShapeEx1 {
	public static void main(String[] args) {
		Shape[] arr = new Shape[2];
		arr[0] = new Circle(10);
		arr[1] = new Rectangle(10,10);
		double areasum=0;
		double lensum=0;
		for(Shape s : arr) {
			System.out.println(s);
			areasum += s.area();
			lensum += s.length();
		}
		System.out.println("전체 도형 면적 합:" + areasum);
		System.out.println("전체 도형 둘레 합:" + lensum);
	}
}
728x90
반응형