일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- 인터페이스
- 네트워크
- 프로토콜
- 백준 1712
- 백준 2775
- 데이터 송수신
- 파이썬
- network
- TCP/IP
- 논리구성도
- 물리구성도
- 10866
- AWS CLF
- 다형성
- 파이썬 1712
- 계층화
- 역캡슐화
- 유선LAN
- l3 스위치
- 상속
- aws 자격증
- 자바
- 남궁성
- 개발바닥
- 자바의 정석
- modifiers
- 테슬라폰
- 인프콘
- 1764
- Today
- Total
병훈's Blog
[Java] 추상클래스 (abstract class) 본문
추상 :
여러 가지 사물이나 개념에서 공통되는
특성이나 속성 따위를 추출하여 파악하는 것
하지만, 객체지향개념에서는 이런 느낌으로 많이 쓰여요.
추상(미완성) <-> 구현(완성)
Java에서 추상클래스를 쉽게 말하면 "미완성 설계도" 에요.
미완성 설계도라서 객체를 생성할 수 없어요.
이 설계도를 완성하여 객체를 생성하려면
추상클래스의 멤버들을 자손클래스에서 구현해야 돼요.
근데, 무엇이 미완성인 걸까요?
자손클래스에서 무엇을 구현하는 걸까요?
추상클래스 (abstract class)
메소드가 미완성입니다.
abstract void play(int pos);
abstract void stop();
이렇게 abstract
키워드가 붙고, 구현부 { } 가 없는 메소드를
추상메소드 라고 불러요.
그리고 추상메소드를 지닌 클래스를
추상클래스 라고 부르고, 마찬가지로 앞에 abstract
키워드를 붙입니다.
그럼 자손클래스에서는 추상클래스를 상속받아서
메소드의 abstract
를 떼고 { } 내부를 작성하여 구현합니다.
만일 자손클래스 마저도 추상메소드를 구현하지 않는다면,
그 자손클래스 역시 추상클래스가 됩니다.
추상클래스를 만들어서 어디에 써먹는 걸까요?
자손클래스에서 공통으로 구현할 메소드를 미리 선언해 놓는 용도입니다.
꼭 필요한 메소드이면서, 자손마다 다르게 구현될 것으로 예상되는 경우에 사용해요.
그렇게 자손클래스를 작성하는 데 도움을 줍니다.
abstract class Unit {
int x, y;
abstract void move(int x, int y);
void stop() {/* 내용생략 */}
}
class Marine extends Unit {
void move(int x, int y) {/* 지상에서 지정된 위치로 이동 */}
void stimpack() {/* 생략 */}
}
class Tank extends Unit {
void move(int x, int y) {/* 지상에서 지정된 위치로 이동 */}
void cahngeMode() {/* 생략 */}
}
class Dropship extends Unit {
void move(int x, int y) {/* 공중에서 지정된 위치로 이동 */}
void load() {/* 생략 */}
void unload() {/* 생략 */}
}
Unit[] group = new Unit[4];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Marine();
group[3] = new Dropship();
for(int i=0; i < group.length; i++){
group[i].move(100, 200);
}
여기서 move()
메소드를 보면
Unit클래스(부모)에서 추상메소드로 있고,
각각의 자손클래스에서 구현되었어요.
그럼 마지막 줄의 group[i].move(100, 200);
를 하면
부모클래스의 move()
가 호출될까요,
자손클래스의 move()
가 호출될까요?
당연히 자손클래스에서 구현된 메소드가 호출됩니다.
인스턴스가 자손클래스의 인스턴스 잖아요?
그리고 부모클래스의 추상메소드에는 내용이 없어요.
언제나 우리가 호출하는 것은
생성된 인스턴스의 멤버라는 것을 기억하자구요!!
참조변수의 클래스는 상관없어요!!
참조변수는 그저 리모콘으로서
각 리모콘마다 다룰 수 있는 버튼의 개수가 다를 뿐이에요.
고생하셨어요 : )
'Java' 카테고리의 다른 글
[Java] 내부/익명 클래스 (0) | 2022.10.05 |
---|---|
[Java] 인터페이스 (interface) (1) | 2022.10.04 |
[Java] 다형성2 (Polymorphism) (1) | 2022.09.29 |
[Java] 다형성1 (Polymorphism) (0) | 2022.09.28 |
[Java] 제어자 (Modifiers) (0) | 2022.09.28 |