특징
1. public interface 로 시작한다
2. 내부 선언된 메소드들은 몸통이 있어서 안된다
3. 여러개의 인터페이스를 implements 할 수 있다
→ 구현한다고 표현
4. 인터페이스를 implements 받아 구현할 경우, 인터페이스에 정의된 메소드들의 몸통을 반드시 만들어주어야한다
5. static이나 final 메소드가 있으면 안된다
1 interface MemberManger
public interface MemberManger {
public boolean addMember(MemberDTO member);
public bollean removeMember(String name, String phone);
}
2 MemberManger 인터페이스를 구현한 MemberMangerImpl
public class MemberManagerImpl implements MemberManger {
@Override
public boolean addMember(MemberDTO member){
return false;
}
@Override
public boolean removeMember(String name, String phone){
return false;
}
}
3 MemberManagerImpl 을 사용한 InterfaceExample
// MemberManager 는 interface 이기에 객체로 생성하면 abstract어쩌고 오류가 난다!
// MemberManager 를 구현한 MemberManagerImpl을 사용해서 객체를 만들어줘야 한다 !
public class InterfaceExample {
public static voi dmain(String args[]) {
// MemberManager member = new MemberManager();
MemberManager member = new MemberManagerImpl();
}
}
특징
1. public abstract 로 시작 (클래스, 메소드 모두)
2. 몸통이 있는 메소드가 있어도 상관X
3. static, final 메소드 있어도 O
4. extneds 를 이용 (상속)
1 추상클래스 MemberManagerAbstract
public abstract class MemberManagerAbstract{
public abstract boolean addMember(MemberDTO member);
public void printLog(String data){
System.out.println("Data=" + data);
}
}
2 추클 MemberManagerAbstract를 상속받은 MemberManagerImpl2
// 추클에서 몸통이 없는 메소드들을 모두 구현해줘야한다 (안그러면 오류남)
public class MemberManagerImpl2 extends MemberManagerAbstract{
public boolean addMember(Member DTO)
{
return false;
}
}
인터페이스 | 추상클래스 | 클래스 | |
---|---|---|---|
선언 시 사용하는 예약어 | interface | abstract class | class |
구현 안된 메소드 포함 여부 | 가능(필수) | 가능 | 불가 |
구현된 메소드 포함 가능 여부 | 불가 | 가능 | 가능(필수) |
static 메소드 선언 가능 여부 | 불가 | 가능 | 가능 |
final 메소드 선언 가능 여부 | 불가 | 가능 | 가능 |
상속(extends) 가능 | 불가 | 가능 | 가능 |
구현(implements) 가능 | 가능 | 불가 | 불가 |
특징
1. 클래스가 final로 선언 시 → 상속이 불가능
2. 메소드가 final로 선언 시 → Overriding 불가능
3. 변수가 final 선언 시 → 값을 더이상 바꿀 수 없음 + 초기화가 꼭 필요 !
▶ 매개변수, 지역변수에 final 사용 시에는 초기화할 필요는 X
( 값이 넘어오거나, 메소드 내에서만 사용되어서)
4. 객체를 final로 선언 시 → 객체를 다른 객체로 변경할 수 없음
▶ 객체 내부의 필드 (값) 들은 변화할 수 있음,,
(그 안에 있는 애들이 final은 아니니까)
특징
1. java.lang.Enum 클래스를 상속받는다
→ 맘대로 다른 enum을 선언해서 사용하면 X