07-39.1 추상 클래스란?
Def) 추상 클래스: 무엇을 만들려는데 어떻게 만들어야할지 모르겠을 때 사용한다.
Ex) '새' 라는 추상클래스 만들어 보자.
- 클래스 앞에 "abstract"라는 키워드를 이용한다.
- 추상클래스는 미완성의 추상 메서드를 포함할 수 있으나 객체를 생성할 수는 없다.
07-39.2 추상클래스 만들기
(1) Bird 클래스 정의
<hide/>
package javaStudy;
public abstract class Bird {
}
(2) 추상 클래스 정의하기
<hide/>
package javaStudy;
public abstract class Bird {
public abstract void sing() ;
}
- 추상 클래스에 상속의 장점을 활용한다면 추상 클래스를 부모 클래스로 사용 가능하다.
- Bird 클래스에 새의 속성을 메서드로 정의한다.
- 메서드 sing()가 추상클래스 라는 걸 알려주기 위해 반환자료형 앞에[키워드"abstract"을 쓴다.
- 클래스 앞에서 추상 클래스 라는 의미로 abstract를 붙인다.
- 이제 Bird는 추상클래스이다.
- 그러나 추상 클래스 라고 해서 반드시 추상 메서드만을 가지는 것은 아니다.
(3)새로운 메서드 fly 정의
<hide/>
package javaStudy;
public abstract class Bird {
public abstract void sing() ;
public void fly() {
System.out.println("날다");
}
}
- 거의 모든 새는 날 수 있으므로 fly()라는 메서드를 일반 메서드로 정의했다.
- 이제 추상 클래스를 상속 받은 오리를 만들자.
(4) 새로운 Duck클래스 생성
- class 이름 Duck, Superclass: javaStudy.Bird > finish
<hide/>
package javaStudy;
public class Duck extends Bird {
@Override
public void sing() {
// TODO Auto-generated method stub
}
}
<hide/>
package javaStudy;
public class Duck extends Bird {
@Override
public void sing() {
// TODO Auto-generated method stub
System.out.println("꽥꽥!!");
}
}
- 꽥꽥!! 하고 울도록 sing()메서드 구현한다.
(5) DuckExam 클래스 만들어서 메서드 테스트
- duck 객체를 하나 만들어서 테스트 한다.
<hide/>
package javaStudy;
public class DuckExam {
public static void main(String[] args) {
Duck duck = new Duck();
duck.sing();
duck.fly();
}
}
Note) 출력결과: 꽥꽥!! 날다
- fly 메서드는 Duck클래스에서는 구현하지 않았지만 Bird클래스를 상속받았기 때문에 사용 가능하다.
- 그렇다면 Bird객체를 생성할 수도 있을까?
07-39.3 Bird객체를 생성한다면?
<hide/>
package javaStudy;
public class DuckExam {
public static void main(String[] args) {
Duck duck = new Duck();
duck.sing();
duck.fly();
Bird b = new Bird();
}
}
Note) 출력 결과: Cannot instantiate the type Bird .. 에러가 발생한다.
- 이처럼 추상 클래스는 부모 클래스로 사용할 수는 있지만 객체를 생성할 수는 없다.
07-39.4 추상 클래스 실습 ) 추상클래스인 Machine 클래스는 turnOn과 turnOff라는 추상 메서드를 가지고 있다.
Machine 클래스를 Car가 상속 받도록 하고 Car 클래스에 turnOn과 turnOff를 구현하라.
<hide/>
package javaStudy;
public abstract class Machine {
public abstract void turnOn();
public abstract void turnOff();
}
<hide/>
package javaStudy;
public class CarExam {
public static void main(String[] args) {
Car car = new Car();
if( car instanceof Machine) {
System.out.println("Car가 Machine을 상속 받았습니다.");
}
else {
System.out.println("Car가 Machine을 상속 받지 않았습니다.");
}
}
}
Note) 출력 결과 : Car가 Machine을 상속 받았습니다.
- 미완성된 메서드를 하나라도 포함하는 클래스는 추상클래스이다.
- 추상클래스는 미완성 클래스이므로 객체를 생성할 수 없다. (일반 클래스와 유일한 차이점)
- 자식클래스에 상속할 수도 있고 타입으로서의 역할도 가능하다.
- 키워드 "extends"라고 이용한다.
- 추상클래스를 상속한 클래스는 추상 클래스가 가진 추상 메서드를 반드시 구현해야 한다.
- 하나라도 구현하지 않으면 크 클래스도 추상클래스가 된다.
- 메서도 안에 아무 내용이 없어도 {}중괄호를 열고 닫으면 컴파일러는 메서드를 구현했다고 받아들인다.
'Java > 모두의 자바' 카테고리의 다른 글
Chapter 07-41 오버라이딩(Overriding) (0) | 2022.02.08 |
---|---|
Chapter 07-40 super과 부모 생성자 (0) | 2022.02.08 |
Chapter 07-38 접근 제한자 (0) | 2022.02.08 |
Chapter 07-37 상속이란? (0) | 2022.02.08 |
Chapter 06-36 패키지 (0) | 2022.02.07 |