실전 자바 강좌 (ver.2018) - 초보부터 개발자 취업까지!! 강의를
개인공부하며 정리하는 용도의 포스팅입니다.
학습목표
- 인터페이스와 비슷한 형태로 구체화되지 않은 멤버를 이용해서 클래스를 만드는 방법 학습
추상클래스란?
클래스의 공통된 부분을 뽑아서 별도의 클래스(추상클래스)로 만들어 놓고, 상속해서 사용
abstract 클래스의 특징
- 멤버 변수를 가진다
- abstract 클래스를 상속하기 위해서는 extends를 이용한다.
- abstract 메서드를 가지며, 상속한 클래스에서 반드시 구현해야 한다.
- 일반 메서드도 가질 수 있다.
- 일반 클래스와 마찬가지로 생성자도 있다.
추상클래스 구현
클래스 상속과 마찬가지로 extends 키워드를 이용해서 상속하고 abstract(추상)메서드를 구현한다
public abstract class AbstractClassEx {
int num;
String str;
public AbstractClassEx() {
System.out.println("AbstractClassEx constructor");
}
public AbstractClassEx(int i, String s) {
System.out.println("AbstractClassEx constructor");
this.num = i;
this.str = s;
}
public void fun1() {
System.out.println(" -- fun1() START -- ");
}
// 이 부분을 반드시 구현하도록 함
public abstract void fun2();
}
public class ClassEx extends AbstractClassEx {
public ClassEx() {
System.out.println("ClassEx constructor");
}
public ClassEx(int i, String s) {
super(i, s);
}
// 위 코드의 public abstract void fun2();를 Override
@Override
public void fun2() {
System.out.println(" --fun2() START -- ");
}
}
실행
AbstractClassEx ex = new ClassEx(10, "java");
ex.fun1();
ex.fun2();
결과
AbstractClassEx constructor
-- fun1() START --
-- fun2() START --
Bank 추상클래스
Bank myBank = new MyBank("박찬호", "123-4567-89012", 10000);
myBank.deposit(); // 예금
myBank.withdraw(); // 출금
myBank.installmentSavings(); // 적금
myBank.cancellation(); // 해약
System.out.println();
myBank.getInfo();
결과
Bank constructor
-- deposit() START --
-- withdraw() START --
-- installmentSavings() START --
-- cancellation() START --
name : 박찬호
account : 123-4567-89012
totalAmount : 10000
인터페이스 Vs 추상클래스
공통점
- 추상 메서드를 가진다
- 객체 생성이 불가하며 자료형(타입)으로 사용된다
차이점
- 인터페이스
- 상수, 추상메서드만 가진다
- 추상 메서드를 구현만 하도록 한다
- 다형성을 지원한다
- 추상클래스
- 클래스가 가지는 모든 속성과 기능을 가진다
- 추상 메서드 구현 및 상속의 기능을 가진다
- 단일 상속만 지원한다
Comments