[Java] OOP_추상클래스(abstract class)

jeong·2021년 6월 10일
0

Java 자바

목록 보기
25/28
post-custom-banner

추상클래스(abstract class)

추상메소드를 포함하고 있는 클래스를 말한다.

  • 인스턴스를 만들 수 없는 클래스
  • new 연산자 사용 불가능
  • 다른 클래스를 작성하는데 도움을 줄 목적으로 생성됨

추상메소드(abstract method)

1) 선언부만 있고 몸통부(body){}가 없는 메소드 - 본문이 없다
2) 추상클래스를 상속한 클래스는 반드시 추상메소드를 재정의해야한다

abstract class Shape { // 추상클래스 
	public String shapeType;
	
	//추상메소드 
	abstract public void draw();
}

//추상클래스를 상속한 클래스 
class Rect extends Shape {
	
	public void draw() {	
		System.out.println("Draw Rect");
	}
}
class Oval extends Shape {
	
	public void draw() {	
		System.out.println("Draw Oval");
	}
}
class Line extends Shape {
	
	public void draw() {	
		System.out.println("Draw Line");
	}
}

예시

public class Ex03AbstractClass {
	public static void main(String[] args) {
		//1. 추상클래스는 인스턴스 생성 X
		//Shape shape = new Shape();
		
		//2. 추상클래스 타입의 참조변수는 만들 수 있습니다. 
		Shape shape = null;
		
		//3. 참조타입과 인스턴스타입이 다른 경우 
		//	참조타입에 없는 인스턴스 타입 메소드를 호출할 수 없습니다. 
		/* 에러 발생
		Shape shape = new Rect();
		shape2.draw();
		*/
		
		//4. 추상클래스와 추상메서드 사용 -> 다형성 적용 
		ArrayList<Shape> shapes = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			if (i % 3 == 0) {
				shapes.add(new Rect());
			} else if (i % 3 == 1) {
				shapes.add(new Oval());
			} else {
				shapes.add(new Line());
			}
		}
		for(Shape s : shapes) {
				s.draw(); //다형성 : 같은 메소드 호출 코드가 인스턴스에 따라 다른 동작 수행 
		}
		
		//5. 번외 연습 : Rect 타입만 골라서 그리기 
		for (Shape s : shapes) {
			if (s instanceof Rect) { //s를 Rect로 형변환해도 되는지 확인 
				Rect r = (Rect)s;
				r.draw(); 				
			}
		}	
	}
}
profile
배우는 초보개발자
post-custom-banner

0개의 댓글