인터페이스
추상 클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야 한다
다른 클래스에서 인터페이스를 지정할 때에는 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
'Dev. > java' 카테고리의 다른 글
Java :: 내부클래스 (inner class) (0) | 2022.07.16 |
---|---|
Java :: 추상클래스 & 인터페이스 (0) | 2022.07.03 |
[Java] TMS 대중교통 터미널 시스템 만들기 (0) | 2022.06.17 |
Java 추상 클래스 (0) | 2022.06.12 |
Java :: 다형성/ 싱글턴 패턴 (0) | 2022.06.12 |
댓글