인터페이스는 일종의 추상클래스. 추상클래스보다 추상화 정도가 높다.
일반 메서드와 변수를 가질 수 있었던 "추상 클래스"와 달리
인터페이스는 추상메서드와 상수만을 구성멤버로 갖는다. 때문에 객체 생성이 불가능하다.
단지, 클래스 작성에 도움을 줄 목적
구조
1) class 대신 interface
2) extends 대신 implements(구현하다)
interface Test{
public static final int A = 10; //상수(final)
public abstract void add(); //추상메서드
}
------------------------------------------------------
class InterTest implements Test{
public void add(){
//오버라이딩
}
}
인터페이스 특징
1) 인터페이스 역시 상속관계에서 쓰이는데 이때 implements 키워드를 사용
2) 구현 받은 클래스는 반드시 상위 클래스의 추상메서드를 "오버라이딩" 해야 한다.
3) 일반적으로 클래스를 상속 받을 때 1:1만 가능하였으나 인터페이스는 다중 상속 가능
인터페이스 장점
1) 개발시간 단축
2) 표준화
예제)
package practice;
interface iVehicle // 인터페이스 선언
{
void show(); //추상 메소드
}
class Carr implements iVehicle //인터페이스 구현
{
private int num;
private double gas;
public Carr(int n, double g)
{
num = n;
gas = g;
System.out.println("차량번호 : " + num);
System.out.println("연료 양 : " + gas);
System.out.println("자동차가 만들어졌습니다.");
}
public void show() // 추상메소드 오버라이딩
{
System.out.println("차량번호 : " + num + "---- 연료 양 : " + gas);
}
}
class Planee implements iVehicle // 인터페이스 구현
{
private int flight;
public Planee(int f)
{
flight = f;
System.out.println("비행기 번호 : " + flight);
}
public void show() // 추상메소드 오버라이딩
{
System.out.println("비행기 번호 : " + flight + "입니다.");
}
}
public class Practice02 {
public static void main(String[] args) {
iVehicle[] iv = new iVehicle[2]; // 인터페이스 배열 준비
iv[0] = new Carr(1234, 50.5); //Carr클래스
iv[1] = new Planee(500); /// Planee클래스
for(int i=0; i<iv.length; i++)
{
iv[i].show();
}
}
}
인터페이스 확장
인터페이스는 클래스와 마찬가지로, 확장해서 새로운 인터페이스를 선언할 수 있다.
확장 되는 인터페이스를 슈퍼 인터페이스, 확장 하는 인터페이스를 서브 인터페이스라고 한다.
extends 키워드를 사용한다
package practice;
interface iVehicle // 인터페이스 선언
{
void show(); //추상 메소드
}
class Carr implements iVehicle //인터페이스 구현
{
private int num;
private double gas;
public Carr(int n, double g)
{
num = n;
gas = g;
System.out.println("차량번호 : " + num);
System.out.println("연료 양 : " + gas);
System.out.println("자동차가 만들어졌습니다.");
}
public void show() // 추상메소드 오버라이딩
{
System.out.println("차량번호 : " + num + "---- 연료 양 : " + gas);
}
}
class Planee implements iVehicle // 인터페이스 구현
{
private int flight;
public Planee(int f)
{
flight = f;
System.out.println("비행기 번호 : " + flight);
}
public void show() // 추상메소드 오버라이딩
{
System.out.println("비행기 번호 : " + flight + "입니다.");
}
}
public class Practice02 {
public static void main(String[] args) {
iVehicle[] iv = new iVehicle[2]; // 인터페이스 배열 준비
iv[0] = new Carr(1234, 50.5); //Carr클래스
iv[1] = new Planee(500); /// Planee클래스
for(int i=0; i<iv.length; i++)
{
iv[i].show();
}
}
}
인터페이스를 확장할 때에는 "extends"를 사용하지만, 이러한 인터페이스를 클래스로 구현할 경우에는
"impleaments"를 사용한다.
강의 요약
● 인터페이스를 선언해서 클래스로 구현할 수 있다.
● 인터페이스 선언된 필드는 상수가 된다.
● 인터페이스의 메소드는 몸체 없는 추상 메소드입니다.
● 인터페이스를 확장해서 서브 인터페이스를 선언할 수 있습니다.
문제1)
다음 항목에 대해 O또는 X로 답하시오.
1. 추상 클래스 변수는 선언할 수 없다.
2. 추상 클래스 객체는 생성할 수 없다.
3. 인터페이스형 변수는 선언할 수 있다.
4. 인터페이스가 인터페이스를 상속받을 때에는 implements키워드를 사용한다.
답 : 1.X 2.O 3.O 4.X
문제2) 다음 코드를 보고 O또는 X로 답하시오.
1 클래스 A는 클래스 B를 확장한 서브 클래스이다.
2. 클래스 A는 인터페이스 C를 구현하고 있다.
3. 인터페이스 C는 클래스 D를 확장한 서브 인터페이스이다.
interface C extends D
{
....
}
interface A extends B implemnets C
{
....
}
답 : 1.O 2.O 3.X
abstract class Vehicle
{
protected int speed;
public void setSpeed(int s)
{
speed = s;
System.out.println("속도를 " + speed + "으로 변경했습니다.");
}
abstract void show();
}
public class Practice04 {
public static void main(String[] args) {
Vehicle vc = new Vehicle();
vc.setSpeed(500);
vc.show();
}
}
답 : 추상클래스는 객체를 만들 수 없다. 또한 추상메서드를 오버라이딩해야한다.
'4. 프로그래밍 기초 > 4_1 JAVA' 카테고리의 다른 글
[JAVA] 애플릿(Applet)이란? - 사용 방법 (0) | 2018.12.25 |
---|---|
[JAVA] 추상화 개념과 예제 (0) | 2018.12.23 |
[JAVA] 상속 개념과 예제 (0) | 2018.12.23 |