본문으로 바로가기

[JAVA] 추상화 개념과 예제

category 4. 프로그래밍 기초/4_1 JAVA 2018. 12. 23. 09:52

  

 

기존의 클래스가 설계도라면, 추상화 클래스는 미완성 설계도라고 할 수 있다.
추상화란? 
   - 물체의 주된 부분만 부각시키는 것!(속성 + 기능)

추상 메서드(미완성 메서드) 
- 선언부만 있고, 구현부가 없는 메서드 
- 메서드 앞에 abstract 라는 키워드 붙이기! 
ex) abstract public void sum();

추상 클래스(미완성 설계도) 
- 추상메서드를 포함하고 있는 클래스 
- class 앞에도 abstract 를 붙여준다.

추상클래스를 상속받은 클래스는 추상메서드를 오버라이딩(재정의) 해야한다.
추상클래스는 미완성 클래스이기 때문에, 인스턴스(객체)를 생성할 수 없다.
추상클래스는 반드시 상속관계를 통해서만 사용할 수 있다.

package abstractEx;

// 추상클래스 선언
abstract class Tv{
	
	int channel;
	
	// 추상메서드를 만든다.
	abstract void channelUp();		//선언부
/*	{
	 		//구현부
	 }
*/
}

public class AbEx01 {
	public static void main(String[] args) {
		//객체 생성 불가 -> 배열을 통해 참조 변수 선언 받아서 실행해야 함.
		//Tv t = new Tv();		
	}
}

 

예제)

package practice;


//탈 것 클래스
abstract class Vehicle //추상클래스
{
	protected int speed;
	public void setSpeed(int s)
	{
		speed = s;
		System.out.println("속도를" + speed + "으로 변경했습니다.");
	}
	abstract void show(); //추상메서드
}

//자동차 클래스
class Car extends Vehicle //추상클래스 상속
{
	private int num;
	private double gas;
	
	public Car(int n, double g)
	{
		num = n; 
		gas = g;
		System.out.println("차량번호" + num + ", 연료양" + gas + "인 자동차가 만들어졌습니다.");
	}
	
	public void show() //추상메서드 오버라이딩
	{
		System.out.println("차량번호는 " + num + "입니다.");
		System.out.println("연료 양은 " + gas + "입니다.");
		System.out.println("속도는 " + speed + "입니다.");
	}
}

//비행기 클라스
class Plane extends Vehicle //추상클래스 상속
{
	private int flight;
	
	public Plane(int f)
	{
		flight = f;
		System.out.println("비행기 번호가" + flight + "인 비행기가 만들어졌습니다.");
	}
	
	public void show() //추상메서드 오버라이딩
	{
		System.out.println("비행기 번호는" + flight + "입니다.");
		System.out.println("속도는" + speed + "입니다.");
	}
}

public class Practice01 {

	public static void main(String[] args) {
	
		Vehicle[] v1 = new Vehicle[2]; //추상 클래스 배열 준비
		
		v1[0] = new Car(1234, 20.5);
		v1[0].setSpeed(60);
		
		v1[1] = new Plane(232);
		v1[1].setSpeed(500);
		
		for(int i=0; i<v1.length; i++)
		{
			v1[i].show();
		}

	}

}

 

강의 요약
● 추상 클래스를 선언할 수 있다.
● 추상 클래스는 몸체가 없는 메소드를 가진다.
● 추상 클래스는 객체를 생성할 수 없다.