인터페이스는 인터페이스에서 작성한 내용을 인터페이스를 상속 받은 클래스에서 반드시 구현해야 하는데
인터페이스는 정의만 하고 안의 내용은 상속 받은 클래스에서 채워 넣어야 한다.,
그래서 인터페이스를 사용 시 상속 받은 클래스에서 동일한 이름과 기능을 보장 받는다.
자바에서 인터페이스는 Class가 아닌 Interface를 만들어 사용한다.
public interface InterExample {
public void makeThis(); // 인터페이스에 정의 후 implements 하면 구현 강제 함
public void makeThisWithParam(String name, int age);
}
위 인터페이스 안에서는 특정 메서드를 이름 또는 이름이나 파라미터만 정의하고 안에 내용은 없는데
이는 인터페이스의 특성상 메서드 안의 내용은 구현하지 못해서이다.
public class ImpleInterface implements InterExample {
@Override
public void makeThis() { // 구현하지 않을 시 에러
System.out.println("makeThis Call");
}
@Override
public void makeThisWithParam(String name, int age) {
System.out.println("makeThisWithParam Call with " + name + " " + age);
}
public static void main(String[] args) {
ImpleInterface inter= new ImpleInterface();
inter.makeThis(); // makeThis Call
inter.makeThisWithParam("현서", 20); // makeThisWithParam Call with 현서 20
}
}
인터페이스의 사용 이유는 인터페이스를 implements 시 반드시 구현해야 하기 때문에
특정 인터페이스 implements 시 각각 다른 클래스에서도 동일한 이름의 메서드를 구현하게 할 수 있다.
implemends 외에 extends도 자주 사용 되는데
extends는 다중 상속이 안 되고 implements는 다중 상속이 되는 차이점이 있다.
인터페이스는 정의만 할 수 있는데 추상 클래스는 abstract를 넣어 일반 메서드를 정의와 구현도 할 수 있다.
public abstract class AbstractClass {
public AbstractClass()
{
System.out.println("MAKE Abs");
}
public abstract void absEmptyMethod2();
public void absMethod()
{
System.out.println("method abs");
}
public static void main(String[] args) {
// AbstractClass ac= new AbstractClass(); // abstract 클래스는 객체화 불가
}
}
객체화(인스턴스화)가 불가능하다.
public class GetAbstract extends AbstractClass{
@Override
public void absEmptyMethod2() {
}
public static void main(String[] args) {
GetAbstract ga= new GetAbstract(); // MAKE Abs
ga.absMethod(); // method abs
}
}
추상 클래스를 상속 받을 시 추상 클래스에서 구현한 메서드는 재 구현이 필요 없지만
추상 메서드는 반드시 구현하거나 클래스 형태를 추상 클래스로 바꿔야 한다.
추상 클래스의 용도는
추상 클래스 안에 정의만 한 메서드와 정의와 구현을 같이 한 메서드를 작성해
각 클래스가 동일하게 사용해야 하는 메서드는 구현까지 한 메서드를 쓰고
각 클래스별로 개별적으로 구현해야 하는 부분은 따로 구현이 가능하다.
'Java' 카테고리의 다른 글
예외처리 (0) | 2022.06.25 |
---|---|
제네릭스 (0) | 2022.06.25 |
this, super (0) | 2022.06.25 |
오버라이드, 오버로드 (0) | 2022.06.25 |
extends, implements (0) | 2022.06.24 |