250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 서블릿
- http 메시지 컨버터
- 스프링
- equals()
- 오블완
- 코딩테스트
- ocp
- DI
- 코드트리조별과제
- 프록시
- 오버라이딩
- java
- 티스토리챌린지
- html form
- 다형성
- @configuration
- 추상클래스
- HttpServletResponse
- 백준
- 코드트리
- 테스트코드
- objecterror
- 싱글톤
- 김영한
- 스프링컨테이너
- JSON
- 참조변수
- 인터페이스
- fielderror
- 의존관계
Archives
- Today
- Total
minOS
자바의 정석 ch7-31,32 추상 클래스,추상 메서드 본문
728x90
ch7-31 추상 클래스(abstract class)
- 미완성 설계도 , 미완성 메서드를 갖고 있는 클래스
예시)
abstract class Player{ abstract void play(int pos); abstract void stop(); }
- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
예시)
abstract class Player{ abstract void play(int pos); abstract void stop(); } class AudioPlayer extends Player{ void play(int pos){/*생략 */} void stop(){/* 생략 */} } public class Main { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); } }
ch7-32 추상메서드(abstract method)
- 미완성 메서드 구현부(몸통{})가 없는 메서드
[형식]
abstract 리턴타입 메서드이름();
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
abstract class Player{ // 추상 클래스 abstract void play(int pos); //추상 메서드 abstract void stop(); // 추상 메서드 } class AudioPlayer extends Player{ void play(int pos){/*생략 */} // 추상 메서드 구현 void stop(){/* 생략 */} // 추상 메서드 구현 } abstract class AbstractPlayer extends Player{ void play(int pos) { /* 생략 */} // 추상 메서드 구현 /* stop 추상 메서드를 구현하지 않았기 때문에 클래스 앞에 abstract 붙여야함 AbstractPlayer는 추상 클래스이기 때문에 인스턴스를 생성할 수 없음 */ }
- 추상 메서드를 호출할 때는 선언부만 있어도 가능하다
abstract class Player{ boolean pause; // 일시정지 상태를 저장하기 위한 변수 int currentPos; // 현재 play 되고 있는 위치를 저장하기 위한 변수 Player(){ // 추상 클래스도 생성자 필요! pause = false; currentPos =0; } /* 지정된 위치 (pos)에서 재생을 시작하는 기능을 수행해야 한다 */ abstract void play (int pos); // 추상메서드 /* 재생을 즉시 멈추는 기능을 수행해야 한다 */ abstract void stop(); // 추상 메서드 void play(){ // 인스턴스 메서드 play(currentPos); // 선언부만을 통해 추상 메서드 호출 할 수 있다. } } /* 상속을 통해 자손 완성 -> 자손 객체 생성 ex) DvdPlayer d = new DvdPlayer(); d.play(); 가능 */
실습
abstract class Player{ // 추상 클래스 abstract void play(int pos); //추상 메서드 abstract void stop(); // 추상 메서드 } class AudioPlayer extends Player { void play(int pos){ System.out.println(pos +"위치부터 play 합니다"); } // 추상 메서드 구현 void stop(){ System.out.println("재생을 멈춥니다"); } // 추상 메서드 구현 void fast(){ System.out.println("빨리 실행 중"); } } public class Main{ public static void main(String[] args) { System.out.println("자손 클래스 객체)"); AudioPlayer ap = new AudioPlayer(); ap.play(100); ap.stop(); ap.fast(); System.out.println(); System.out.println("부모 클래스 객체)"); Player p = new AudioPlayer(); // 다형성 때문에 가능 p.play(20); p.stop(); //p.fast(); 에러 } }
출력
728x90
'TIL > 남궁성의 자바의 정석' 카테고리의 다른 글
자바의 정석 ch7-34 추상 클래스의 작성 2 (0) | 2023.12.31 |
---|---|
자바의 정석 ch7-33 추상 클래스의 작성 1 (0) | 2023.12.30 |
자바의 정석 ch7-29,30 여러 종류의 객체를 배열로 다루기 (2) | 2023.12.28 |
자바의 정석 ch7-27,28 매개변수 다형성 (0) | 2023.12.25 |
자바의 정석 ch7-26 instanceof 연산자 (5) | 2023.12.21 |