JAVA/변수 및 객체, 기타

추상클래스와 인터페이스

Lune Bleue 2019. 12. 17. 01:25

1. 추상클래스

1)생성법

ㄱ) 추상클래스(미완성 클래스)

접근제한자 abstract 클래스{

 



추상클래스는 미완성클래스이므로 객채를 새로 생성할 수 없다.

(단 주소값 받기는 가능하다. )

주소값 받는 법

레퍼런스(추상클래스)명 객채명; 

 객채명 = new 상속중인클래스();

 

일반 클래스 처럼 클래스내에 일반 변수, 메소드 포함이 가능하다.

 

추상클래스에는 추상메소드가 없어도 선언이 가능하지만 추상메소드가 있는 클래스는 반드시 추상클래스 이어야한다. 

 

추상 클래스의 장점 : 일관된 인터페이스 제공

                            꼭 필요한 기능 강제화(공통적이나 자식클래스에서 특수화 되는 기능)

 

 

2)추상메소드
접근제한자 [예약어] abstract 반환형 메소드명(); (예약어 내의 위치는 상관없다. abstract도 예약어)


ㄱ)몸통이 없다({}).

ㄴ)받는 클래스는 추상메소드의 재정의가 강제된다.(반드시 재정의 해야 한다.)

   -> 만약 추상메소드를 쓰고 싶지 않을시 바디 부분을 비워주는것이 가능하다.

 

ㄷ)반드시 추상클래스  or 인터페이스 안에 있어야된다.

ㄹ)받은 클래스에서 재정의 하면 그 받은 클래스를 상속하는 자식 클래스는 재정의를 안해도 되고, 가져와서 쓸 수도 있다.

 


2.인터페이스

상수형 필드와 추상 메소드만을 작성할 수있는 추상 클래스의 변형체. 

메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아 놓은 것으로 상속 시 인터페이스 내에 정의된 모든 추상 메소드 구현 필요

일반적인 상속의 경우 하나의 클래스만 가능하지만 인터페이스는 상속에 상관없이 여러개를 implements가 가능하다.

 

ex) public class 클래스명 [extends 부모클래스] implements 인터페이스1, 인터페이스2.....{

 

}

 

1)생성법
 접근제한자 interface 인터페이스명{

 

}


인터페이스끼리는 상속가능(extends)

접근제한자 interface 인터페이스 extends 부모인터페이스

 

 

2)인터페이스의 멤버

ㄱ)필드는 상수필드이다.

 

[public static final] 자료형 대문자변수명;

(public static final은 생략 가능하다)



ㄴ)메소드는 무조건 추상 메소드다.

public abstract 자료형 메소드명([매개변수]); 


모든 메소드는 추상 메소드 이므로 public abstract는 생략 가능하다

자료형 메소드명([매개변수]);

 

인터페이스를 끌어와 쓰는 클래스는 인터페이스에 있는 메소드는 추상 메소드 이기에 쓰든 안쓰든 무조건 오버라이딩 해주어야된다.

 

특징

ㄱ)모든 인터페이스는 묵시적으로 public abstract

ㄴ)변수는 묵시적으로 public static final 이다. 다라서 인터페이스 변수의 값 변경 시도 시 컴파일 에러가 발생한다.

ㄷ) 객채 생성은 안되나 참조형 변수로는 가능하다.

인터페이스명 변수명;

변수명 = new 인터페이스를 implemnet하는 클래스();

 

장점 

ㄱ)상위 타입 역할로 다형성을 지원하여 연결

ㄴ)해당 객체가 다양한 기능 제공시에도 인터페이스에 해당하는 기능만을 사용하게 제한 가능

ㄷ)공통 기능 상의 일관성 제공

ㄹ)공동작업을 위한 인터페이스 제공

 

= 상속과 거의 비슷한 역할 을 하며, 다중사용이 가능하다.



추상클래스와 인터페이스 공통점 차이점

ㄱ)공통점

객체의 생성은 불가능하나 주소를 참조하는 참조타입(Reference)로는 가능하다.

ㄴ)차이점
추상클래스 : 단일상속, 추상메소드가 없어도 가능, abstract 명시 필요
인터페이스 : 다중상속 가능, 모든메소드는 추상메소드, abstract 묵시적