12. 인터페이스
12-1. 추상 클래스
클래스 이름 앞에 abstract
를 붙인다
- 객체 생성 불가!
- 몸체 없는 메소드! ( = 추상 메소드 )
abstract class Vehicle
{
//....
// abstract 클래스의 메소드에는 "몸체 X"
abstract void show();
}
추상 클래스 사용하기
그럼 왜 필요?
추상 클래스를 *상속받아서 서브클래스 생성 하기 위해! ( via extends
)
“반드시 추상 메소드의 몸체를, 서브 클래스에서 오버라이딩해서 구현해야”
abstract class Vehicle
{
//....
// 추상 메소드 show()
abstract void show();
}
class Car extends Vehicle
{
//....
public void show()
{
// 몸체 만들어야!
System.out.println("차량 번호는"+num)
System.out.println("연료 양은"+gas)
System.out.println("속도는"+speed)
}
}
class Plane extends Vehicle
{
// 마찬가지로 show()메소드 오버라이딩
}
요약
- 추상 클래스로 객체 생성은 불가
- 클래스의 변수나 뱅열에, 서브 클래스의 객체를 담을순 O
- 반드시 하위 클래스에서 오버라이딩 해야!
- 장점 : 서브클래스들의 관리 용이
instanceof 연산자
많은 양의 서브클래스를 다뤄야할 경우, 편리!
- “객체의 클래스”를 알아낼 수 있음
class Sample2
{
public static void main(String[] args)
{
Vehicle[] vc;
vc = new Vehicle[2];
vc[0] = new Car(1234,20.5);
vc[1] = new Plane(232);
for(int i=0; i<vc.length; i++){
// instanceof 사용통해 TRUE/FALSE 반환
if(vc[i] instanceof Car)
System.out.println((i+1)+"번째 객체는 자동차");
else
System.out.println((i+1)+"번째 객체는 자동차 아님");
}
}
}
12-2. 인터페이스
추상 클래스와 비슷한 역할을 하는 인터페이스(interface)
( 객체 생성 불가 ( new 등을 사용하여 ) )
인터페이스의 선언 ex)
interface iVehicle
{
// 추상 메소드
void show();
}
- 필드 O
- 메소드 O
- 생성자 X
인터페이스의 멤버
-
인터페이스의 멤버에는 어떠한 제한자도 X
( but,필드 앞에는 “public static final”, 메소드 앞에는 “abstract”를 붙인 것과 마찬가지1 )
- 인터페이스의 필드 = 상수
- 인터페이스의 메소드 = 추상 메소드
-
즉, 필드 변경 불가 & 메소드에 몸체 생성 불가
인터페이스 구현하기
인터페이스는 클래스와 조합해서 사용해야! = called “인터페이스를 구현”
class Car implements iVehicle
{
//...
}
-
Car class는 iVehicle이 가지고 있는 필드(상수)와 메소드 이름을 물려받음
-
Car class의 객체를 생성하기 위해서는…
인터페이스의 메소드를 모두 정의해줘야!
12-3. 클래스 계층
다중 상속의 원리 이해하기
다수의 클래스/인스턴스를 조합해야 하는 상황…..
두 개 이상의 클래스 상속은 불가능!
BUT, 인터페이스를 사용하면, 다중 상속 메커니즘 일부 구현 가능!
2개 이상의 인터페이스 구현
interface iVehicle
{
void vShow();
}
interface iMaterial
{
void mShow();
}
class Car implements iVehicle, iMaterial
{
public void vShow()
{
// 구현해야
}
public void mShow()
{
// 구현해야
}
}
인터페이스 확장하기
서브 인터페이스 & 슈퍼 인터페이스 ( extends
사용하기 )
헷갈리지 말기!
extends
: 인터페이스 확장할 때implements
: 인터페이스를 클래스로 구현할 때
interface iVehicle extends iMovable
{
...
}
class Car implements iVehicle
{
...
}
클래스의 계층 구조 설계하기
추상 클래스 & 인터페이스를 사용하면, 많은 클래스를 한번에 제어가능하다!
( 주로 대규모 프로그램 작성 시 사용됨 )
요약
추상 클래스
- 객체 생성 불가
- 추상 메소드 = 몸체 없는 메소드
인터페이스
- 선언해서 클래스로 구현 가능
- 필드 = 상수
- 메소드 = 추상 메소드
- 서브 인터페이스 선언 가능