음악 플레이어를 구현할거기 때문에 Player라는 클래스를
abstract class Player {
}
이렇게 만들어줍니다.
public이 아닌 abstract인 이유는 추상 클래스이기 때문입니다.
추상 클래스의 인스턴스 함수 선언은 abstract를 붙입니다
play할 곡을 넣을 play함수, 일시정지 하는 pause함수, 완전히 멈추는 stop함수를 선언해줍니다.
그다음 Main클래스를 만들어 Player클래스를 상속받아 줍니다.
그러면 왼쪽에 오류표시가 뜨는데 눌러서 Add unimplemented methods를 눌러줍니다
그러면 이렇게 아직 구현이 안된 함수들이 자동으로 만들어집니다.
즉, Player 추상 클래스를 상속받은 자식 클래스들은 반드시 추상적으로 선언이 되었던
추상 함수들을 반드시 상속을 받아 내용을 구현을 해줘야합니다.
진짜 음악플레이어를 만드는게 아니라 여기서는 추상함수를 사용만 하기위한 예제이므로
대충 출력함수만 기능에 넣어줍니다.
그 후에
그냥 play()함수를 선언 할 수도 있지만 그렇게하면 오류가 뜨는데
왜냐하면, main이란 함수는 static선언이 되어있는데 그 함수안에서 다른함수를 선언하려면
선언하려는 함수도 static으로 선언되어있어야 하기 때문입니다.
따라서, Main클래스의 main이라는 인스턴스 변수를 하나 만들고
main.play()로 play함수를 실행해줍니다.
이렇게 나머지 두개의 함수들도 실행해줍니다.
이게 바로 의미가 있는 이유는 실질적으로 작동하는 측면에서는 별 다를게 없지만
추상 클래스를 상속받았기 때문에 @override 표시가 붙으면서
자기가 상속받은 Player함수에서 반드시 구현하라고 미리 설계해놓은 3개의 함수를
반드시 구현해야하는 요소라고 알려주기 때문입니다.
정확히 어떤 메소드들을 구현해야하는지 설계적인 측면에서 의미가 있다고 할 수 있는겁니다.
이런 추상 클래스를 상속받지 않았으면 머리속으로 어떤 함수를 구현해야하고 이름은 어떻게 해야하는지
다 미리 그려줘야하기때문에 비효율적이므로 추상클래스로 미리 설계해놓은겁니다.
전반적인 프로그램을 더 깔끔하게 작성하는게 추상클래스의 존재의의 입니다.
좀더 실질적인 예를 위하여 Animal 추상 클래스를 정의해줍니다
간단하게 crying이라는 메소드를 선언해주고
Dog이라는 또 하나의 클래스를 만들어
Animal 클래스를 상속받아줍니다.
간단하게 멍! 멍! 을 출력하는 crying 상속받은 함수를 정의해주고
Cat이라는 클래스도 만들어서 똑같은 형태로
이렇게 만들어줍니다
팁은 위에서 했듯이 extends Animal을 입력했을때 나오는 왼쪽 오류표시에서
한번에 상속 함수들을 불러오는 방법을 꼭 사용합시다.
마지막으로 main함수에서 Dog과 Cat의 인스턴스를 생성하여
cryting함수를 실행해보면
이런식으로 출력이 됩니다.
이렇게 체계적으로 Animal이라는 추상 클래스를 상속받은 자식 클래스들은 crying이라는 함수를
반드시 구현해야한다는것을 알려줌으로써 공통적인 특성을 가지게 됩니다
이것을 main 메소드에서 사용해주는게 프로그램의 완성인 거고요
간단하게 추상 클래스를 알아봤습니다
인터페이스(Interface) (0) | 2020.10.06 |
---|---|
최종(Final)의 쓰임 (0) | 2020.10.06 |
추상(Abstract) (0) | 2020.10.06 |
상속에 대해서2 (0) | 2020.10.06 |
클래스의 상속 (0) | 2020.10.06 |