반응형
추상 클래스
- abstract로 선언한 클래스
- 추상 메소드를 포함
추상 메소드
- 선언은 되어 있으나 코드가 구현되어 있지 않은 껍데기만 있는 메소드
- abstract 키워드와 함께 타입, 이름, 매개변수만 선언
- 자식클래스에서 오버라이딩하여 사용
추상 클래스의 특징
- 객체를 생성 불가 (선언은 가능 ex DObject obj;)
- 추상메소드 뿐만이 아니라 일반 메소드 포함 가능
추상 클래스의 상속
추상 클래스를 상속받은 클래스도 추상 메소드를 전부 오버라이딩 하지 않으면 추상 클래스가 된다.
예시
// 추상 클래스
abstract class DObject {
abstract public void draw();
}
// 추상 클래스를 상속한 클래스1
class Line extends DObject {
public void draw() {
System.out.println("Line draw");
}
}
// 추상 클래스를 상속한 클래스2
class Circle extends DObject {
public void draw() {
System.out.println("Circle draw");
}
}
class Memo {
public static void main(String args[]) {
DObject obj = new Line(); // 상속 클래스1 객체 생성 (업캐스팅)
obj.draw();
DObject obj2 = new Circle(); // 상속 클래스2 객체 생성 (업캐스팅)
obj2.draw();
}
}
결과
Line draw
Circle draw
인터페이스
- 추상 클래스와 유사
- interface 키워드를 사용하여 선언
특징
- 메소드는 추상 메소드, 필드는 상수만으로 구성된다. (따라서 abstract 키워드는 생략)
- 모든 메소드는 public 이며 생략이 가능
void print(); = public abstract void print();
- 상수도 public static final 생략 가능
- 객체 생성 불가
- 다중 상속 허용
- 인터페이스들 끼리 상속이 가능(extends), 역시 다중 상속 가능
JDK 8부터는..
- default 메소드 (abstract 메소드가 아니라 일반 메소드처럼 쓸 수 있음)
- static 메소드 포함 가능
인터페이스의 상속
- JAVA는 클래스의 다중 상속은 지원하지 않으나 인터페이스의 다중 상속은 허용
- 프로그램 수정 시 기존 인터페이스를 변경하는 것은 기존 인터페이스에 맞춰 작성된 코드에 문제를 발생시킬 수 있으므로, 인터페이스 수정이 필요한 경우엔 기존 인터페이스를 상속받아 새로운 인터페이스를 만든다.
인터페이스의 구현(상속)
- 클래스에서 인터페이스의 추상메소드를 구현하는 것.
- implements 키워드를 사용하여 클래스를 작성
※ 복수의 인터페이스를 상속하는 다중상속(다중구현) 시에는 상속받은 각 인터페이스의 모든 추상 메소드를 구현해줘야 한다.
※ 클래스 상속과 같이 쓸 수 있다
ex) public class SmartPhone extends MobilePhone implements PDA, MP3
예시
interface MobilePhone {
boolean sendCall();
boolean receiveCall();
boolean sendSMS();
boolean receiveSMS();
}
interface MP3 {
void play();
void stop();
}
public class Memo implements MobilePhone, MP3 {
/* 상속받은 인터페이스의 모든 메소드를 구현 */
public boolean sendCall() {
return false;
}
public boolean receiveCall() {
return false;
}
public boolean sendSMS() {
return false;
}
public boolean receiveSMS() {
return false;
}
public void play() {
return;
}
public void stop() {
return;
}
}
인터페이스와 추상클래스의 비교
추상클래스 |
인터페이스 |
추상 메소드, 일반 메소드 포함 가능 |
추상 메소드만 포함 가능 |
상수, 변수 필드 포함 가능 |
상수 필드만 포함 가능 |
단일 상속만 가능 |
다중 상속 지원 |
추상클래스
추상클래스를 상속받는 서브클래스들은 부모인 추상클래스로부터 기능(일반 메소드, 변수)을 유전받고, 추가할 수 있다. 따라서 서브클래스들이 공통적인 요소를 필요로 한다면 추상클래스
인터페이스
클래스의 틀을 짜는게 목적이거나 다중상속을 필요로 한다면 인터페이스
반응형
'개발_웹 > Java' 카테고리의 다른 글
Java | 객체(Object) ↔ XML (spring oxm, jaxb를 이용한 xml 변환) (0) | 2017.10.31 |
---|---|
Java | 객체(Object) ↔ XML (JAXB, Simple Framework) (0) | 2017.10.31 |
Java | split() - 문자열 나누기 (0) | 2017.09.04 |
Java | 태그가 적용되지 않고, 화면에 그대로 노출될 경우 (JSTL, escapeXml) (0) | 2017.09.03 |
Java | 자바로 경고창(Alert) 띄우기 (0) | 2017.09.02 |