기존의 클래스가 설계도라면, 추상화 클래스는 미완성 설계도라고 할 수 있다.
추상화란?
- 물체의 주된 부분만 부각시키는 것!(속성 + 기능)
추상 메서드(미완성 메서드)
- 선언부만 있고, 구현부가 없는 메서드
- 메서드 앞에 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();
}
}
}
강의 요약
● 추상 클래스를 선언할 수 있다.
● 추상 클래스는 몸체가 없는 메소드를 가진다.
● 추상 클래스는 객체를 생성할 수 없다.
'4. 프로그래밍 기초 > 4_1 JAVA' 카테고리의 다른 글
[JAVA] 애플릿(Applet)이란? - 사용 방법 (0) | 2018.12.25 |
---|---|
[JAVA] 인터페이스 사용 방법 (0) | 2018.12.25 |
[JAVA] 상속 개념과 예제 (0) | 2018.12.23 |