Small Grey Outline Pointer Java :: 인터페이스
본문 바로가기
Dev./java

Java :: 인터페이스

by sso. 2022. 7. 3.

인터페이스

추상 클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야 한다
다른 클래스에서 인터페이스를 지정할 때에는 implements 를 사용한다
(자바에서는 다중상속이 안된다)
지정된 인터페이스가 가지고 있는 추상 메서드들을 반드시 재정의 해야한다




 

군인 프로그램 

 

package day20;

public interface Soldier {
	int arms=2;
	final static int legs=2;
	
	abstract void eat(); //미구현 된 추상메서드
	void work();
	void play();
	void sleep();
	void salute();
}

 

package day20;

public class Private implements Soldier{

	@Override
	public void eat() {
		System.out.println("천천히 각을 재서 90도로 앉아서 먹는다");
	}

	@Override
	public void work() {
		System.out.println("아주 열심히 일하지만 결과물이 없다");
	}

	@Override
	public void play() {
		System.out.println("안타깝게도 남은 일들이 많아서 꿈에서 논다");
	}

	@Override
	public void sleep() {
		play();
		System.out.println("잠에 들지 못한다");
	}

	@Override
	public void salute() {
		System.out.println("충!!!!!!!!!!!!!성!!!!!!!!!!!!");
	}

}

 

 

 

 


 

 

 

새로운 클래스 생성시, 인터페이스를 지정한 상태로 만들 수 있다

Army 클래스는 Soldier 인터페이스를 implements 받은 상태로 만들어 진다 

 

 

Soldier 인터페이스가 재정의 되어 만들어진다

 

 

 

 

 

 

 

package day20;

public class Sergeant implements Soldier{

	@Override
	public void eat() {
		System.out.println("안하고 PX");
	}

	@Override
	public void work() {
		
	}

	@Override
	public void play() {
		System.out.println("하루 종일 논다");
	}

	@Override
	public void sleep() {
		System.out.println("하루 종일 잔다");
	}

	@Override
	public void salute() {
		System.out.println("ㅊㅅ");
	}

}

 

 

 

package day20;

public class Sergeant extends Army{
	@Override
	public void eat() {
		super.eat();
	}
	
	@Override
	public void sleep() {
		super.sleep();
	}
	
	@Override
	public void play() {
		super.play();
	}
	
}

클래스 Army의 목적은 솔져에 있는 강제성이 부여된 것들을 골라서 쓰자는 목적

무조건 Soldier를 써야 하는데, 반드시 재정의 안해도 될 것들이 있다 (ex 상병의 work)

하지만 다른 곳에서는 강제성에 의해 반드시 재정의 해야하고, 어떤 한 부분에서는 골라 써야한다

그럴 땐 implements Soldier가 아닌, extends Army를 받아서 원하는 것만 골라서 사용한다 

 

 

인터페이스를 사용할 땐 어댑터도 사용

728x90

댓글