Abstract Class (추상 클래스)
추상 클래스는 설계도에 비유한다면 미완성 설계도라고 할 수 있다.
미완성 설계도란 완성되지 못한 설계도면을 말한다.
미완성 설계도로 완성 제품을 만들 수 없듯이 추상 클래스도 인스턴스를 만들 수 없다.
추상 클래스는 상속을 통해서 자손 클래스에 의해서만 객체를 만들 수 있다.
Abstract Method 와 Abstract Class
추상 클래스 | 추상메소드 |
추상클래스를 한개이상 포함하는 클래스 | 추상메소드는 직접 어떠한 명령을 수행하는 것이 아니고 메소드의 머리만 정의해 놓은 메소드이다. |
추상클래스를 상속 받은 클래스는 추상메소드를 재정의해서 더이상 추상메소드를 갖지 않는 클래스로 객체화 한다. | |
<추상클래스의 역할> - 작업명세표를 제공한다 -추상클레스에 있는 추상메소드를 반드시구현하도록 강제한다. |
추상 메서드의 사용
abstract class 클래스 이름 {
abstract void 추상 메서드 이름 ( ) ;
.......... ;
}
(예시) - 추상 메소드는 반드시 오버 라이딩되어야 한다.
abstract class 도형 {
int i = 33;
abstract void draw();
void show() {
System.out.println("도형 클래스 속 show() 메소드 &&&");
}
}
class 사각형 extends 도형 {
@Override
void draw() {
// 도형을 상속 받은 사각형은 추상메소드를 반드시 오버라이딩 해야한다.
System.out.println("사각형을 그린다");
}
}
class 삼각형 extends 도형 {
@Override
void draw() {
// 마찬가지로 추상메소드 오버라이딩
System.out.println("삼각형을 그린다");
}
}
public class Style_1 {
public static void main(String[] args) {
도형 obj_1 = new 사각형(); // 도형으로도 받을 수 있음
도형 obj_2 = new 삼각형();
obj_1.draw();
obj_2.draw();
obj_2.show();
}
}
사각형을 그린다
삼각형을 그린다
도형 클래스 속 show() 메서드 &&&
도형으로 사각형이 형 변환되었지만 사각형의 메서드가 출력된다.
(멤버는 쉐도잉 되고 메서드는 오버 라이딩된다.)
(자식 메서드에서 add unimplement method 눌러서 오버라이딩 메소드 만들기)
추상 클래스 안의 메서드라도 추상 메서드가 아니면 반드시 오버 라이딩될 필요는 없다.
🟢(예시) - 객체를 하나만 생성해서 활용하는 방법
abstract class Style_88 { // 추상클래스
int i = 77;
abstract void draw();
abstract void print();
}
class Square extends Style_88 {
@Override
void draw() {
System.out.println("사각형을 그린다!!!");
}
@Override
void print() {
System.out.println("Square");
}
}
class Circle extends Style_88 {
@Override
void draw() {
System.out.println("원을 그린다!!!");
}
@Override
void print() {
System.out.println("Circle");
}
}
class Triangle extends Style_88 {
@Override
void draw() {
System.out.println("삼각형을 그린다!!!");
}
@Override
void print() {
System.out.println("Triangle");
}
}
public class Style_2 {
public static void main(String[] args) {
// 방법 1
Square obj_1 = new Square();
Circle obj_2 = new Circle();
Triangle obj_3 = new Triangle();
obj_1.draw();
obj_1.print();
obj_2.draw();
obj_2.print();
obj_3.draw();
obj_3.print();
System.out.println("===========================================");
// 방법 2
Style_88 ooo_1 = new Square();
ooo_1.draw();
ooo_1.print();
ooo_1 = new Circle();
ooo_1.draw();
ooo_1.print();
ooo_1 = new Triangle();
ooo_1.draw();
ooo_1.print();
}
}
방법 1 은 객체를 obj_1,2,3 여러 개를 만들어야 하지만
방법 2를 사용하면 ooo_1이라는 하나의 객체를 만들어서
사용할 수 있음으로 더 많이 사용된다.
방법 2에서는 Style_88이라는 공통의 부모 클래스를 통해 oo_1을 만들어 놓고
new 연산자를 이용해 각각의 삼각형, 사각형, 원 클래스로 접근한다.
'KH > JAVA' 카테고리의 다른 글
# 26 Singleton pattern (0) | 2022.07.19 |
---|---|
# 25 Interface (인터페이스) (0) | 2022.07.19 |
# 23 객체의 형변환(Convert) 과 이를 이용한상속 예시들 (0) | 2022.07.18 |
# 22 메소드의 오버라이딩(Overriding) (0) | 2022.07.18 |
# 21 상속 (Inheritance) , final (0) | 2022.07.15 |