추상 클래스 : 추상 메서드(몸통이 없다 {} -> 구현부분이 없음 )를 가지고 있는 클래스
abstract를 붙여서 사용한다
인스턴스 생성 불가
상속을 해야 인스턴스 생성 가능하다
추상 메서드 : 꼭 필요하지만 자손마다 다르게 구현해야 할 경우
상속한 뒤 구현부를 다시 작성 해야한다
만약 첫 부모의 추상 메서드를 전부 재정의 하지 않으면 그 메서드 역시 추상메서드니까 abstract붙여야 한다
추상클래스에서 추상 메서드를 사용(호출)할 수 있는데
1. 인스턴스 메서드에서 추상 메서드를 호출
2. 인스턴스 메서드는 인스턴스가 생성된 뒤에 동작한다
3. 인스턴스가 생겼다는것은 추상메서드를 구현했다는 의미
abstract class Player{
boolean pause;
int currentPos;
Player(){currentPos = 0;}
abstract void play(int pos);
void play(){play(currentPos); } // im이기 때문에 문제없다
}
인터페이스 : 추상 메서드의 집합
추상 클래스 = 일반 클래스인데 추상메서드를 가지는것
인터페이스 = 전혀 아무것도 구현되어 있는것이 없는 껍데기(모든 멤버가 public),상수만 가능 변수는 불가능
가장 큰 차이점은 인터페이스는 인스턴스 밸류를 가질 수 없다
1.8부터 상수, static, 디폴트 메서드가 추가 되었다
interface Nmae{
public static final int a=4;
final int b =3;
static int c =2;
int d=1;
public abstract void getNum();
void getNum();
}
상수는 항상 public static final이여서 일부를 생략해서 초기화 해도 된다
메서드는 항상 public abstract여서 일부 생략해도 가능
인터페이스의 조상은 인테페이스만 가능하다 (object는 불가)
다중상속이 가능하다 -> 인터페이스는 어차피 추상메서드만 존재
추상메서드는 충돌가능성이 없다 -> 어차피 구현되어 있지 않으니까
인터페이스의 구현
class Name implements iName{추상메서드를 전부 구현해야 한다}
만약 추상메서드를 전부 구현한것이 아니면 클래스 앞에 abstract를 붙여야 한다
인터페이스를 이용한 다형성
'JAVA > 자바의 정석' 카테고리의 다른 글
자바의정석CH7-객체지향2-1 (0) | 2024.01.18 |
---|---|
자바의정석CH6 객체지향-1 (0) | 2024.01.17 |
자바의 정석ch5 배열 (0) | 2024.01.16 |
자바의정석CH4 조건문과 반복문 (0) | 2024.01.16 |
자바의 정석 CH3 (0) | 2024.01.16 |