티스토리 뷰
[인터페이스]
구현방식 : class 클래스명 implements 인터페이스명
1. 클래스를 작성하는 데에 도움을 주기 위해 사용한다.
(추상클래스와 비슷하지만 추상화 정도가 더 높음)
2. 추상 메소드와 상수만을 멤버로 갖는다.
3. 인터페이스 내의 메소드는 항상 public이며 abstract 키워드가 생략되어 있다.
-> 메소드를 인터페이스 외부에서도 구현할 수 있으려면 모두가 볼 수 있는 public으로 지정해야 함.
또한 인터페이스 내의 메소드는 항상 추상 메소드여야하므로 써있지 않더라도 abstract 가 생략되어 있음.
4. 여러 개의 인터페이스를 동시에 상속(extends, implements) 받을 수 있다. (인터페이스는 콤마로 구분)
5. 인터페이스 간의 상속 시에는 implements가 아닌 extends를 사용
6. 추상클래스와 인터페이스 모두를 상속 받으려면 다음과 같은 방식으로 사용
-> class 클래스명 extends 추상클래스명 implements 인터페이스명
※ 심화
interface Inter1 {
void a();
}
interface Inter2 {
void b();
}
interface Inter extends Inter1, Inter2 {
void c();
}
abstract class AbsClass {
abstract void d();
}
public class Example extends AbsClass implements Inter {
public void a() {
System.out.println("AAA");
}
public void b() {
System.out.println("BBB");
}
public void c() {
System.out.println("CCC");
}
public void d() {
System.out.println("DDD");
}
// 추상클래스와 인터페이스의 메소드 모두 구현 완료
public static void main(String[] args) {
Example ex1 = new Example(); // O
AbsClass ex2 = new AbsClass(); // X
Inter ex3 = new Inter(); // X
AbsClass ex4 = new Example(); // O !!!!
Inter ex5 = new Example(); // O !!!!
ex4.a(); // X
ex4.b(); // X
ex4.c(); // X
ex4.d(); // O !!!
ex5.a(); // O !!!
ex5.b(); // O !!!
ex5.c(); // O !!!
ex5.d(); // X
}
}
AbsClass ex4 = new Example(); 과 Inter ex5 = new Example(); 를 보면
추상클래스와 인터페이스는 객체 생성이 불가하지만 이를 상속하여 구현이 완료된 자식 클래스를 이용해서는 객체를 생성할 수 있다. (=> 다형성)
또한, 그렇게 만들어진 객체는 원래 자신이 가지고 있는 메소드에만 접근이 가능하다.
즉, AbsClass ex4 = new Example(); 에서 ex4 객체는 AbsClass에 존재하는 d() 메소드에만 접근이 가능하다.
'Java, JavaScript' 카테고리의 다른 글
[Java] 예외 처리 (try~catch, throws) (0) | 2019.06.07 |
---|---|
[Java] 다형성(Polymorphism)과 instanceof 연산자 (0) | 2019.05.10 |
[Java] abstract과 final (0) | 2019.04.30 |
[Java] 패키지(Package)와 접근 지정자(Access modifier) (0) | 2019.04.29 |
[Java] 상속(Inheritance)과 오버라이딩(Overriding) (0) | 2019.04.29 |