JAVA/자바의 정석

자바의 정석 CH07 객체지향2-2

브리오 2024. 1. 27. 17:11

추상 클래스 : 추상 메서드(몸통이 없다 {} -> 구현부분이 없음 )를 가지고 있는 클래스

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를 붙여야 한다

 

인터페이스를 이용한 다형성