추상클래스

  • 코드 만들 때 중요한 정보와 그렇지 않은 정보를 구분해서 설계해야 함
  • 공통 속성을 뽑아냄 (일반화)
  • ex) Animal(추상클래스)은 Dog와 Cat의 공통 속성을 뽑아낸다.

 

추상화 

  • 중요한 것은 남기고 필요 없는 것은 없애는 것
  • 객체들 간의 공통되는 특성을 추출하는 것

 

추상 클래스

  • 실체 클래스를 만들기 위한 부모 클래스로만 사용
    • 스스로 객체가 될 수 X -> 부모 클래스로만 사용
    • 물려주기만 하는 용도 (확장을 위한 용도)
    • 구현이 불가능 -> 선언만 함
  • 하나 이상의 메서드만 가짐
  • 속성(필드)와 기능(메서드)를 정의할 수 있다
  • 추상 클래스를 상속하는 실체 클래스 -> 추상 메소드를 반드시 구현해야함
    • 특정 기능을 구현 강요하는 측면 있음
      • ex) Car라는 추상 클래스를 상속하는 Sport Car가 있으면
      • Car의 가속()이라는 메소드를 Sport Car 클래스에 가속()클래스를 오버라이딩해서 무조건 구현해야한다.
  • 추상 메소드는 추상 클래스에만 존재
    • 추상 클래스는 하나 이상의 추상 메서드를 가짐
      • 오버라이딩 해야함

 

추상 클래스의 선언

  • 클래서 선언에 abstrct 키워드

 

실습

shpae.java

package shape.v1;

//	추상 클래스
public abstract class Shape {
	protected int x;
	protected int y;
	
	public Shape(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	//	추상 클래스는 내부에 반드시 하나 이상의 추상메소드가 있어야 
	public abstract void draw();
	public abstract double area();
}

Rectangle.java

package shape.v1;

public class Rectangle extends Shape{
	//	필드
	protected int width;
	protected int height;
	
	public Rectangle(int x, int y, int width, int height) {
		super(x,y);
		this.width = width;
		this.height = height;
	}
	
	
	//	모두 구현해줘야 한다. 
	//	source -> override/.. 클릭
	@Override
	public void draw() {
		System.out.printf("사각형[x = %d, y = %d, w = %d, h = %d, area = %f]\n",x,y,width, height,area());
	}

	@Override
	public double area() {
		return width * height;
	}	
}

Circle.java

package shape.v1;

public class Circle extends Shape {
	protected double r;
	
	public Circle(int x, int y, int r) {
		super(x, y);
		this.r = r;
	}

	
	@Override
	public void draw() {
		System.out.printf("원[x=%d, y=%d, r=%f, area = %f]을 그렸어요\n", x,y,r,area());
	}

	@Override
	public double area() {
		return Math.PI * Math.pow(r, 2);
	}

}

ShapeApp.java (메인)

package shape.v1;

public class ShapeApp {

	public static void main(String[] args) {
//		shape  s = shape();	//	에러 -> 추상 클래스는 객체화 할 수 없다.
		Rectangle r = new Rectangle(10, 20, 100, 50);
		r.draw();
		
		Circle c = new Circle(10, 10, 30);
		c.draw();
	}

}

결과

사각형[x = 10, y = 20, w = 100, h = 50, area = 5000.000000]
원[x=10, y=10, r=30.000000, area = 2827.433388]을 그렸어요

 

 

'study > JAVA 전문가' 카테고리의 다른 글

인터페이스  (0) 2021.12.07
예외  (0) 2021.12.07
[모의 필기테스트] 오답노트 & 정리  (0) 2021.12.07
java Class  (0) 2021.12.06
[DAY+2]Java Programming  (0) 2021.12.03

+ Recent posts