1. 추상화 (Abstract)
# 추상화란, 물체의 주된 부분만 부각시키는 것을 의미한다.
1) 추상 메서드
- 선언부만 있고, 구현부가 없는 메서드
2) 추상 클래스
- 기능이 완전히 구현되지 않은 클래스
(1) 선언된 메서드들 중에서도 기능이 완전히 구현된 것과 선언부만 존재하는 메소드가 혼재될 수 있다.
(2) 추상 클래스는 반드시 하나 이상의 추상 메소드를 가지고 있어야 한다.
(3) 추상 클래스가 되는 종류
- 추상 메서드를 포함하고 있기 때문에 추상화가 된 클래스
- 클래스 앞에 abstract 키워드를 붙인 클래스
3) 추상 클래스는 '미완성 도면' 이기 때문에 객체를 생성할 수 없다.
- 추상 클래스는 완전하지 않은 형태의 클래스이다. 때문에 객체 지향 프로그래밍의 다형성을 표현할 수 있다.
4) 추상 클래스를 '상속' 받은 클래스는, 부모의 추상 메서드를 '반드시' 오버라이딩(재정의) 해야한다.
- 강제성!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package abstractex; abstract class Tv { int channel; // abstract 메서드가 있다면 클래스도 추상화 해주어야 한다. void channelDown() {} abstract void channelUp(); } public class AbstractTest01 { public static void main(String[] args) { // 추상 클래스는 객체를 생성할 수 없다. // Tv myTv = new Tv(); } } | cs |
2. 선언 방법과 주의 사항
(1) 추상 클래스에는 하나 이상의 추상 메소드가 존재해야 한다.
(2) abstract 제어자는 클래스 변수를 선언할 때 사용할 수 없다.
(3) 추상 클래스는 추상 메소드를 선언하는 것 외에 일반 클래스에서 할 수 있는 모든 것을 지원한다.
(4) 추상 메소드는 실행부 없이 메소드 선언부만 선언하면 된다.
단, 그 끝은 세미콜론(;)으로 종료한다.
(5) 추상 클래스는 혼자서는 인스턴스화 해서 객체를 생성할 수 없다.
(6) 추상 클래스는 extends 키워드를 사용해서 상속 관계를 맺을 수 있다.
추상 클래스의 일반 메소드와 변수들은 그대로 자식 클래스가 상속받는다.
(7) 추상 클래스를 상속받은 자식 클래스는 추상 메소드를 반드시 오버라이딩 해야한다.
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 32 33 34 | package abstractex; abstract class Video { abstract void display(); void channelChange() { System.out.println("Video 비디오 채널 변경"); } } class VideoTv extends Video { // 추상화 클래스를 상속받은 자식 클래스는 // 강제성을 띄어 부모 추상화 클래스의 추상 메서드를 오버라이딩 해야한다. @Override void display() { System.out.println("VideoTv 비디오 채널 변경"); } void parentChannelChange() { super.channelChange(); } } public class AbstractTest02 { public static void main(String[] args) { // Video myVideo = new Video(); VideoTv myVideoTv = new VideoTv(); myVideoTv.display(); // VideoTv 비디오 채널 변경 myVideoTv.parentChannelChange(); // Video 비디오 채널 변경 } } |
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day03 | 상속 연습문제 (Pen) (0) | 2018.01.12 |
---|---|
JAVA2_day03 | 인터페이스 (Interface) (0) | 2018.01.12 |
JAVA2_day03 | final 제어자 (0) | 2018.01.12 |
JAVA2_day02 | 클래스 Class 연습문제 (1) (단어 검색) (0) | 2018.01.11 |
JAVA2_day02 | Garbage Collector (가비지 콜렉터) (0) | 2018.01.11 |