abstract / final / interface

2021. 10. 12. 10:53Java

반응형

추상 클래스

추상 메소드 하나라도 가진 미완성 클래스

클래스 이름 앞에 abstract가 붙는다

추상 메소드가 아닌 메소드가 존재할 수도 있다

 

추상을 강제하기 위한 것

부모 클래스에는 메소드의 시그니처만 정의해놓고

그 메소드의 실제 동작 방법은 자식 클래스에게 위임 

 

인스턴스(객체) 생성 불가 == 구체적인 메소드 내용이 없기 때문

상속을 통해 추상 메소드를 구현 후 해당 자손 객체 생성은 가능

 

 

추상 메소드

선언부만 존재하고 구현부{}가 없는 메소드

자손마다 구현부를 다르게 구현할 때 정의

완성해도 되고 abstract를 유지해서 추상 메소드의 완성을 미룰 수 있다

 

 


final

추상은 상속을 강제

final은 상속/변경을 금지하는 규제

final로 지정된 변수는 한번 값이 할당되면 변경 불가

상속도 당연히 불가

 


 

interface

추상메소드의 집합

완성된 것이 전혀 없는 껍데기(모든 멤버가 public)

└ 인터페이스 안의 추상메소드는 접근제한자 예약어 등 생략 가능

무조건 public에 abstract이기 때문

다중 상속이 가능

└ 충돌 : 메소드끼리 선언부가 다르면 충돌X, 선언부가 같고 구현부{}가 다르면 충돌(=자식이 누구에게 상속받을지 결정 불가)

└ 추상메소드는 구현부{}가 애초에 없기 때문에 충돌 문제 X

└ 자바는 단일상속만 가능하지만 interface는 예외

대신 인터페이스의 부모는 인터페이스만 가능

 

인터페이스의 구현

상속을 통해서 추상 메소드를 완성하는 것

구현할 때는 implements 붙인다

일부만 구현할 경우에는 인터페이스(추상클래스의 집합은)에서 벗어난

추상 클래스가 됐기 때문에 앞에 abstract를 붙인다

interface A {
     void a();      // void 앞에 public abstract 생략
     void a_a();
}



// 상속을 통해 구현이 완성될 경우
class B implements A { 	   // implements를 붙인다
	  public void a() {/* 구현부 */}
      public void a_a() {/* 구현부 */}     
}


// 일부만 구현한 경우
abstract class B implements A {     // abstract를 붙인다
	  public void a() {/* 구현부 */}
}

 

  추상클래스(abstract) 인터페이스(interface)
객체 생성 불가 불가
상속 단일 상속 다중 상속
키워드 abstract 기술 abstract 생략가능
추상메소드 추상메소드 1개 이상 추상메소드의 집합
일반메소드/필드 일반 메소드, 필드 가능 상수필드만 가질 수 있음
반응형

'Java' 카테고리의 다른 글

API, Wrapper Class  (0) 2021.10.13
캡슐화, setter과 getter메소드  (0) 2021.09.28
오버라이딩, 오버로딩  (0) 2021.09.23
상속, super과 super()  (0) 2021.09.17
클래스, 인스턴스와 객체  (0) 2021.09.15