인터페이스
다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스
문법
- 객체 생성이 불가능하다.(하위클래스를 활용해야한다.)
- 모든 멤버변수는 public static final,모든 메서드는 public abstract가 생략가능하다.
public interface Fightable {
int degree=100;
int fire();
}
- 인터페이스와 인터페이스는 다중상속이 가능하다.(extends)
interface Fightable{
int fire();
}
interface Transformable{
void changeShape(boolean isHeroMode);
}
public interface Heroable extends Fightable,Transformable{
void upgrade();
}
- 클래스와 인터페이스는 다중 확장이 가능하다.(implements)
interface Fightable{
int fire();
}
interface Transformable{
void changeShape(boolean isHeroMode);
}
class IronMan implements Fightable,Transformable{
int weaponDamage=100;
@Override
public int fire() {
System.out.println("발사!");
return weaponDamage;
}
@Override
public void changeShape(boolean isHeroMode) {
System.out.println("변신!!");
}
}
- implements를 한 클래스에서 추상메서드를 구현하지 않으면 그 클래스는 추상 클래스로 선언되어야 한다.
interface Fightable{
int fire();
}
interface Transformable{
void changeShape(boolean isHeroMode);
}
abstract class IronMan implements Fightable,Transformable{
int weaponDamage=100;
@Override
public int fire() {
System.out.println("발사!");
return weaponDamage;
}
}
interface Fightable{
int fire();
}
class Fighter implements Fightable{
int damage;
Fighter(int damage){
this.damage=damage;
}
@Override
public int fire() {
System.out.println("공격!");
return this.damage;
}
}
public class InterTest {
public static void main(String[] args) {
Fighter f1=new Fighter(50);
System.out.println(f1.fire());
Fightable f2=f1;
System.out.println(f2.fire());
}
}
추상클래스와 인터페이스의 상속관계 차이
- 추상클래스 extends 추상클래스(단일)
- 추상클래스 implements 인터페이스(다중)
- 인터페이스 extends 인터페이스 (다중)
- 인터페이스 implements 인터페이스 X ->존재하지 않는다.
인터페이스의 필요성
- 구현의 강제로 표준화 처리
- 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
- 서로 상속관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
- 모듈 간 독립적 프로그래밍 가능