1. Class의 상속은 Class로 만들지만, 참조할 때는 Interface로 만든다.

// Classromm 클래스가 Rule1 클래스를 상속하는 경우. (Classromm : Sub Class, Rule1 : Super Class)
public class Classroom extends Rule1 {

}

// Classroom 클래스가 Rule1 인터페이스를 참조하는 경우.
public class Classroom implements Rule1 {

}

 

 

2. Interface는 복제의 개념이 아니다.

상속의 경우 APFS의 복제와 비슷했다. 하지만 Interface의 참조는 그것과는 전혀 다르다. 참조한다고 해서 Interface의 모든 것을 가지고 있지 않는다.

상속은 보이지는 않지만 Super Class의 모든 것을 복제하고 거기에 Sub Class를 덮어씌워  확장해 나가는 것으로 Sub Class는 기본적으로 Super Class의 모든 것을 포함하고있다. 인터페이스는 아무것도 구현하지 않고 오직 Abstract만 메소드만 구현한 Abstract 클래스와 비슷하다고 볼 수 있다.

 

 

3. Interface는 다중 참조가 가능하다.

public interface Rule1 {
	public void test();
	
	public int getNumber();

}
public interface Rule2 {
	public String getName();

}

 

Rule1, Rule2라는 인터페이스를 참조하는 Classroom이라는 클래스를 만들면

public class Classroom implements Rule1, Rule2 {

	@Override
	public void test() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int getNumber() {
		// TODO Auto-generated method stub
		return 0;
	}
	
	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return null;
	}

}

 

 

4. Interface간의 상속도 가능하다.

public interface Rule2_2 extends Rule2 {
	public void Rank();

}

이렇게 Rule2를 상속하는 Rule2_2라는 인터페이스를 만들면, 사실 Rule2_2는 다음과 같다.

public interface Rule2_2 extends Rule2 {
//	public String getName();	// 보이지 않지만 Rule2에 있는 public String getName();을 가지고 있는 것과 같다.

	public void Rank();

}

 

따라서, Classroom이라는 클래스가 Rule1, Rule2를 참조하도록 하면 다음과 같다.

public class Classroom implements Rule1, Rule2_2 {

	@Override
	public void test() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int getNumber() {
		// TODO Auto-generated method stub
		return 0;
	}
	
	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void Rank() {
		// TODO Auto-generated method stub
		
	}


}

 

 

Interface (인터페이스)는 복제가 아니다, 단지 참조시킴으로써 규칙만 정해준다!!

+ Recent posts