이제 자바 문법이 얼마남지 않았습니다.
추상 클래스는 완전하게 구현되어 있지 않은 메소드를 가지고 있는 클래스 입니다.
- 추상 클래스는 추상 메서드를 가지고 있다. 하나이상 가지고 있어야 한다.
- 추상 클래스는 new(동적 바인딩)할 수 없다. (오브젝트가 아닙니다.)
public abstract class Animal {
public abstract void move();
}
※위처럼 추상 메소드를 선언시에는
;
로 끝을 내주어야 합니다.예제
abstract class Shape {
int x, y;
public void translate(int x, int y) {
this.x = x;
this.y = y;
}
public abstract void draw(); // 추상 메소드 선언!
}
class Rectangle extends Shape{
int width, height;
public void draw() {
System.out.println("사각형 그리기 메소드");
}
}
class Circle extends Shape{
int radius;
public void draw() {
System.out.println("동그라미 그리기 메소드");
}
}
public class AbstractTest {
public static void main(String[] args) {
// Shape s1 = new Shape(); -> 오류!! 추상 클래스로 객체를 생성할 수는 없습니다.
Shape s2 = new Circle();
s2.draw();
}
}

도형을 그리는
draw()
메소드는 도형(클래스)마다 그리는 방법이 달라진다. 따라서 Shape()
에서 정의될 수 없기 때문에 추상 메소드로 정의한다. 그리고 각 클래스에서 추상 메소드를 구현했습니다.🧐 추상 클래스를 사용하는 이유가 뭘까
추상 메소드로 정의
abstract class Shape{
public abstract void draw();
}
일반 메소드로 정의
class Shape{
public void draw() {}
}
class Circle etends Shape{
@Override
public void draw() {
System.out.println("Circle draw");
}
}
자식클래스에서 반드시 오버라이드해야 한다.
(하지 않으면 오류 발생)
class Circle etends Shape{
@Override
public void draw() {
System.out.println("Circle draw");
}
}
자식 클래스에서 오버라이드 하지 않아도 컴파일러가 체크할 방법이 없다.
∴자식 클래스에서 추상 메소드
draw()
구현을 강요(강제)하기 위해서 사용된다.Share article