본문 바로가기
수업(국비지원)/Java

[Java] chap7 : 클래스의 관계 - 추상클래스 Shape

by byeolsub 2023. 4. 15.
  • 추상클래스 Shape
추상클래스
  1. 추상메서드를 가질 수 있는 클래스. abstract예약어 사용함.
  2. 객체화 불가 => 객체화는 상속을 통해서 자손클래스의 객체로 객체화 가능
  3. 객체화되는 자손클래스는 반드시 추상메서드를 오버라이딩 해야함
  4. 그 외는 일반 클래스와 동일
    (생성자,멤버변수,멤버메서드, 다른 클래스를 상속 받을 수 있음,...)
  5. 업무를 표준화 시킬 수 있음.
   
추상메서드 : 선언부만 존재함. 구현부가 없다.
             자손클래스에서 반드시 오버라이딩을 하도록 강제함.(오버라이딩 필수)

 

📌

package chap7;

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;
	}
	@Override
	double area() {
		return Math.PI*r*r;
	}
	@Override
	double length() {
		return  Math.PI*r*2;
	}
	public String toString() {
		return "반지름="+r+", 넓이="+area()+", 둘레="+length();
	}
}
class Rectangle extends Shape{
	int width,height;
	Rectangle(int width,int height){
		super("사각형");
		this.width = width;
		this.height = height;
	}
	@Override
	double area() {
		return width*height;
	}
	@Override
	double length() {
		return (width+height)*2;
	}
	public String toString() {
		return "가로="+width+", 세로="+height+", 면적="+area()+", 둘레="+length();
	}
}
public class ShapeEx1 {
	public static void main(String[] args) {
//오류.	Shape s = new Shape("도형"); //추상 클래스는 객체화가 불가하다.
		Shape[] arr = new Shape[2];
		arr[0] = new Circle(10);
		arr[1] = new Rectangle(5,5);
		for(Shape s: arr) {
			System.out.println(s);
		}
		//도형의 면적의 합과 둘레의 합을 출력하기
		//arr[0] :Shape타입의 참조변수
		//arr[0].area() : Circle 객체의 area()메서드 호출
		//arr[1].area() : Recyangle 객체의 area()메서드 호출
		System.out.println("도형의 면적의 합: "+(arr[0].area()+arr[1].area()));
		System.out.println("도형 둘레의 합: "+(arr[0].length()+arr[1].length()));
	}
}