인터페이스 

형식) 

interface 인터페이스명{
	//멤버변수에 상수만 가능
    public (static final) int SU=3; //괄호 생략 가능
    //추상메소드만 선언 가능
    public (abstract) void cal();
}

 

인터페이스 생성 

new > interface > extended interfaces(add) 

 

인터페이스와 추상클래스의 공통점

- 인터페이스를 구현하는 클래스는 인터페이스에서 선언된 추상메소드를 반드시 오버라이딩 해야한다(강제성)

- 객체를 생성할 수 없다

 

인터페이스와 추상클래스와의 차이점

- 인터페이스는 추상메소드만 작성할 수 있다, 일반메소드는 포함하지 않는다(모두 추상메소드이기 때문에 abstract키워드를 통해 구분해주지 않아도 된다) 하지만 추상클래스는 일반메소드도 포함시킬 수 있다

- 인터페이스는 다중 인터페이스 구현이 가능하지만 추상클래스는 단일상속만 가능하다

 

추상클래스, 인터페이스를 사용하는 목적

설계목적

: 장비가 다르다고 해서 각각 기능은 같은데 메소드명을 다 다르게 주면 나중에 통합할때 

문제가 발생한다 -> 일관성을 부여한다

 


인터페이스 상속

//자식인터페이스명 extends 부모인터페이스명
public interface AdvanceVolume extends Volume {
/*  부모로부터 물려받은 추상메서드를 이미 가지고 있는 상태
 *  public void turnOn();
 *	public void turnOff();
 */
	public void volumeUp(int level);
	public void volumeDown(int level);
}

 

자식인터페이스를 구현한 클래스(TV, Radio) 

public class TV implements AdvanceVolume {//public class Radio implements AdvanceVolume

	private int VolLevel;//볼륨의 크기
    
	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
      System.out.println("TV 음악프로그램을 turn On!");
	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		 System.out.println("TV 음악프로그램을 turn Off!");
	}

	@Override
	public void volumeUp(int level) {
		// TODO Auto-generated method stub
       VolLevel+=level;
       System.out.println("TV음악프로그램의 볼륨을"+level+"만큼 올림!");
	}

	@Override
	public void volumeDown(int level) {
		// TODO Auto-generated method stub
		VolLevel-=level;
		if(VolLevel < 0)
			VolLevel=0;
	    System.out.println("TV음악프로그램의 볼륨을"+level+"만큼 내림!");
	}
}

 

public class VolTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TV t=new TV();
		Radio ra=new Radio();
		/*
		 * 객체는 다 다르지만 공통으로 사용하는 메서드명에 통일성 부여
         * ->내부기능은 다 다르다.
		 */
		t.turnOn();
		ra.turnOn();
		
		t.volumeUp(12);
		ra.volumeUp(7);
	}
}
/*
TV 음악프로그램을 turn On!
Radio 음악프로그램을 turn On!
TV음악프로그램의 볼륨을12만큼 올림!
Radio 음악프로그램의 볼륨을7만큼 올림!
*/

 

+ Recent posts