면접에서 추상 클래스와 인터페이스의 차이를 물어보셨다.
핑계지만 C++로 개발하던 중이었던 나는 어렴풋이 알고 있어서 대답을 못했다.
소잃고 외양간을 고치듯이 지금이라도 대답을 해보려 한다.
- 인터페이스는 다중 상속이 가능하나 추상클래스는 다중 상속이 안된다!
- 인터페이스는 멤버 변수를 선언할 시에 public static final 즉 상수만 된다!
- 추상 클래스는 일반 메서드와 멤버 변수를 선언할 수 있다!
더 많은 특징들이 있지만 대답이 바로 나올 수 있는 것들만 정리했다.
각자 기능들의 특징을 정리하고자 한다!
내가 좋아하는 재벌집 막내아들로 구현을 해보았다.
추상 클래스
public abstract class 순양 {
// abstract는 멤버 변수 선언이 가능하다.
private String name = "진양철";
// abstract는 메서드 선언이 가능하다.
public void 진양철() {
System.out.println("순양은 내꺼다!");
}
public abstract void 지주사주총();
//지주사 주총 메서드 작성을 해야 하는데 abstract로 구현하면 떠넘기기가 가능하다.
public abstract class 물산 extends 순양 {
public abstract void 물산주총();
}
// 일반 클래스로 구현하면 상속받은 추상 클래스에 추상메소드를 구현을 해야 한다.
public class 증권 extends 순양 {
@Override
public void 지주사주총() {
}
}
//물산 클래스를 상속받았지만 작성을 하지 않은 순양 클래스 메서드도 같이 구현해야 한다.
public class 전자 extends 물산 {
@Override
public void 물산주총() {
}
@Override
public void 지주사주총() {
}
}
}
인터페이스
public interface 순양 {
//필드 변수는 상수만 된다!
public static final String name = "진양철";
public interface 물산 {
public static final String name = "진영기";
void 물산주총();
}
public interface 증권 {
public static final String name = "진동기";
void 증권주총();
}
//인터페이스는 다중 상속이 가능하다!
//인터페이스끼리 상속할 때는 extends!
public interface 전자 extends 순양, 증권 {
void 전자주총();
}
//인터페이스를 가져올 때는 implements
//상속받은 구현부는 다 재정의를 해줘야 한다.
class 미라클 implements 전자 {
@Override
public void 증권주총() {
}
@Override
public void 전자주총() {
}
}
}'Java' 카테고리의 다른 글
| [백준] 2993번 : 세 부분 (0) | 2023.03.07 |
|---|---|
| [백준] 11478번 : 서로 다른 부분 문자열의 개수 (0) | 2023.03.02 |
| [백준] 9996번 : 한국이 그리울 땐 서버에 접속하지 (0) | 2023.03.01 |
| [백준] 11899번 : 괄호 끼워넣기 (0) | 2023.02.28 |
| 자바 연습하기(일기) (0) | 2023.01.26 |