추상클래스
- 코드 만들 때 중요한 정보와 그렇지 않은 정보를 구분해서 설계해야 함
- 공통 속성을 뽑아냄 (일반화)
- 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 |