extends
- 상속
- 클래스에서 사용
- 슈퍼클래스에 정의된 필드와 매서드 사용 가능
- 또 다른 특징은 .... 다중 상속이 불가능하다는 것! 다중 상속이란 부모 클래스가 2개 이상 존재하는 것을 의미한다.
즉 무조건 하나의 슈퍼 클래스만 상속 가능하다는 의미다.
public class Son extends Mother, Father....가 불가능하다!
자바가 다중 상속을 지원하지 않기에 등장한 것... 그것이 바로 인터페이스다.
implements
- 역시 상속을 의미한다.
- 인터페이스에서 사용
- 여러 개 상속 가능: public class Son implements Mother, Father 가능하다
- 가장 큰 특징은 부모의 메서드를 반드시 오버라이딩(재정의)해야 한다는 것이다. -> 사실 이걸 보면 상속이 아닌 거 같다만 자바에서 상속이라니까..
- 그리고 인터페이스에 정의된 메서드는 선언만 되어 있음. 껍데기 함수 형만 적혀있는 것-> 어떻게 보면 명세서와 같은 역할이다. 틀만 선언되어 있지 구체적인 함수 구현은 인터페이스를 상속받은 객체에서 이뤄진다.
코드 예시
인터페이스 정의
package com.company;
public interface PersonInterface {
public static final String name = "Dobby";
public void sayMyName();
public void sayMyHome();
}
1. 인터페이스 내에 필드는 무조건 공개여야 한다. 명세서 역할이기 때문
public static final로 선언해야 함. 안 붙여도 알아서 public static final이 된다.
2. 메서드는 추상화만 구현
클래스
package com.company;
public class BachelorImpl implements PersonInterface {
private String home;
public BachelorImpl(String home){
this.home = home;
}
@Override
public void sayMyName(){
System.out.println("I am " + name);
}
@Override
public void sayMyHome(){
System.out.println("I live in " + home);
}
}
1. interface를 상속한 클래스는 구분을 위해 함수 이름 뒤에 주로 Impl이나 I를 붙인다.
2. 인터페이스에서 정의한 필드는 사용가능하다.
3. 인터페이스에서 정의한 필드는 final이므로 생성자에서 재정의할 수 없다.
main
package com.company;
public class Main {
public static void main(String[] args) {
BachelorImpl bachelor = new BachelorImpl("Lab");
bachelor.sayMyName();
bachelor.sayMyHome();
}
}
결과:
'프로그래밍 언어 > java' 카테고리의 다른 글
[java] 접근 제어자, 정보 은닉 (0) | 2021.02.24 |
---|---|
[java] 클래스 생성자 (0) | 2021.02.24 |
[java] 클래스와 인스턴스 (0) | 2021.02.22 |
[java] Optional과 orElse 시리즈 (0) | 2020.10.08 |
[java] 자바 기본 문법 @override (0) | 2020.10.02 |
댓글