들은 영상
인터페이스도 구현 클래스의 부모이다
오버라이딩 규칙: 조상보다 접근제어자가 좁으면안된다.
interface Fightable에 move가 private라면 private과 public 접근제어자를
쓸수있으나 public이라면 private와 protect를 사용할수없다.
interface Fightable{
void move(int x, int y); // public abstract가 생략된
void attack(Fightable f); // public abstract가 생략된
//attack의 매게변수가 Fightable인데 이 의미는
// Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능하다는 뜻이다
}
class Fighter extends Unit implements Fightable{
//오버라이딩 규칙: 조상보다 접근제어자가 좁으면안된다.
//interface Fightable에 move가 private라면 private과 public 접근제어자를
//쓸수있으나 public이라면 private와 protect를 사용할수없다.
public void move(int x, int y){
System.out.println("현재 위치는 : "+ x +", " + y+"입니다");
}
public void attack(Fightable f){
System.out.println(f+"를 공격");
}
public void bash(int y){
System.out.println("배쉬 공격은 : "+ x +"입니다");
}
Unit u = new Fighter();
Fightable f = new Fighter();
f.move(100,200);
f.attack(new Fighter());
//f.bash(50); Fightable 인터페이스에
//bash라는 메소드가 없어 사용할수없다.
Fightable getFightable(){
Fighter f = new Fighter();
return f;
}
}
인터페이스에 있는 메소드만 다형성을 이용하여 사용할수있다.
인터페이스를 메서드의 리턴타입으로 지정할수있다.
Fightable method(){
Fighter f = new fighter();
return f
// 위의 두문장을 한문장으로 바꾸면 return new Fighter();게 된다.
}
public class FighterTest{
public static void main(String[] args){
Fighter f = new Fighter();
f.getFightable();
}
}
장점
1.클라이언트는 대상의 역할(인터페이스)만 알면된다.
2.클라이언트는 구현 대상의 내부구조를 몰라도 된다.
3.클라이언트는 구현대상의 내부구조가 변경되어도 영향을 받지 안흔ㄴ다.
4.클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
개념
1.인터페이스의 구현체는 다 인터페이스의 메소드를 오버라이딩 하는것이다.
과자라는 인터페이스가 있고 구현채들에는 과자의 촉감, 케이스, 양이 있는데
양파링이라는 과자가 촉감이 바뀌고 껍질 양이 바뀌어도 과자라는 그 큰 틀안에 있고
양파링 과자 라고 한다면 이해하는것처럼
과자에 양파링이라는 구현체의 내용이 바뀌어도 과자라는 인터페이스에 필요한 내용을 구현해 뒀다면 아무문제 없이 적용된다.