본문으로 바로가기

인터페이스, 다중상속

category 프로그래밍/java 2017. 9. 4. 20:57

인터페이스 원리

Java에서는 추상 클래스와 거의 비슷한 인터페이스(interface)라는 기능을 사용해서 표현가능하다.


인터페이스 선언

interface iVehicle 인터페이스의 선언부

{

void show(); 추상메소드를 가진다. 

}

class 대신에 interface를 사용


interface 인터페이스 이름

{

형(type)명 필드명 = 식(expression); 필드는 반드시 초기화

리턴 값의 형(type) 메소드(method) 명() 메소드 몸체는 만들지 않는다.

}

인터페이스는 필드와 메소드를 가진다. 단 생성자를 가질 수 없다.

인터페이스 멤버에슨 어떠한 제한자도 붙이지 않느다. 그러나 인터페이스 형 변수와 배열은 선언가능


인터페이스 구현


인터페이스는 class와 조합해서 사용해야 한다. 인터페이스를 클래스와 조합해서 사용하는 행위를 인터페이스 구현(implementaion)이라고 한다. 몸체는 implements에서 반드시 만들어줘야 한다.


class Car implements iVehicle(인터페이스 구현한 Car클래스)
{

}



Car클래스의 객체를 선언하기 위해서는 인터페이스의 메소드 모두 정의해야 한다.

이렇게 되면 Car 클래스는 iVehicle 인터페이스가 가지고 있는 필드(상수)와 메소드 이름을 물려 받게 된다. 

// 탈것 인터페이스


interface iVehicle  인터페이스 선언


{

    

void show(); 추상메소드


}


// 자동차 클래스


class Car implements iVehicle 인터페이스 구현(클래스와 조합)


{

    

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 + "입니다.");

    

}


}


// 비행기 클래스


class Plane implements iVehicle


{

    

private int flight;


    

    

public Plane(int f)

    

{

        

flight = f;

        

System.out.println("비행기 번호가 " + flight +   "인 비행기가 만들어졌습니다.");

    

}

    

public void show()

{

        

System.out.println ("비행기 번호는 "+ flight + "입니다.");

    

}


}



class Sample3


{

    

public static void main(String[] args)

    

{

        


iVehicle[] ivc;

        

ivc = new iVehicle[2];

        

        


ivc[0] = new Car(1234, 20.5);

        

        

ivc[1] = new Plane(232);

        

        


for(int i=0; i<ivc.length; i++){

            

ivc[i].show();

        

}

    

}


}


차량 번호가 1234이며, 연료 양이 20.5인 자동차가 만들어졌습니다.

비행기 번호가 232인 비행기가 만들어졌습니다.

차량 번호는 1234입니다.

연료 양은 20.5입니다.

비행기 번호는 232입니다.


다중 상속의 원리 이해하기


큰 프로그램을 만들때는 다수의 클래스와 인터페이스를 조합해야 한다. 
Java에서는 하나 이상의 클래스를 상속받을 수 없다. 


//class Car extends Vehicle, Material

//{

// . . . 클래스를 상용한 다중 상속은 불가능
//}



2개 이상의 인터페이스 구현하기

class 클래스 이름 implements 인터페이스 이름 1, 인터페이스 이름2


2개이상의 인터페이스 구현하기


// 탈것 인터페이스


interface iVehicle


{

    

void vShow ();   iVehicle의 추상 메소드


}


// 목재 인터페이스


interface iMaterial


{

    

void mShow(); iMatrial의 추상 메소드


}


// 자동차 클래스


class Car implements iVehicle, iMaterial 2개 이상의 인터페이스를 구현


{

    

private int num;

    

private double gas;

    

    


public Car(int n, double g)

    

{

        

num = n;

        

gas = g;

        

System.out.println("차량 번호가 " + num + "이며, 연료 양이 " + gas + "인 자동차가 만들어졌습니다.");

    

}

    

public void vShow() iVehicle 메소드를 정의

    

{

        

System.out.println("차량 번호는 " + num + "입니다.");

        

System.out.println("연료 양은 " + gas + " 입니다.");

    

}

    

public void mShow() iMaterial 메소드 정의

    

{

        

System.out.println("자동차의 재질은 철입니다.");

    

}


}


class Sample4


{

    

public static void main(String[] args)

    

{

        

Car car1 = new Car(1234, 20.5);

 car1.vShow();

        

car1.mShow();

    

}


}


차량 번호가 1234이며, 연료 양이 20.5인 자동차가 만들어졌습니다.

차량 번호는 1234입니다.

연료 양은 20.5 입니다.

자동차의 재질은 철입니다.


인터페이스 확장하기


확장되는 인터 페이스를  슈퍼인터페이스


확장하는 인터페이스를 서브인터페이스


인터페이스를 확장할때는 다음과 같이 extends를 붙인다. 


인터페이스의 확장

interface 서브 인터페이스 이름 extends 슈퍼 인터페이스 이름 1, 슈퍼 인터페이스 이름 2.,,,


//움직이는 인터페이스 (슈퍼 인터페이스)

interface iMovable

{

}

// 탈 것 인터페이스(서브 인터페이스)

// 자동차 인터페이스(서브 인터 페이스를 구현한 클래스)

{

}

슈퍼 인터페이스

Ι extends

서브 인터페이스

Ι implements

클래스

'프로그래밍 > java' 카테고리의 다른 글

예외 및 입출력 처리  (1216) 2017.09.11
대규모 프로그램사용(파일분할, 패키지, 임포트)  (1197) 2017.09.08
추상 클래스, instanceof 연산자)  (1179) 2017.09.03
상속-2(다형성과 오버라이딩, 캡슐화,super)  (1535) 2017.09.02
상속-1  (498) 2017.09.01