추상(abstract) <-> 구체적(concrete)
추상클래스란?
: 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
- 추상메서드가 포함된 추상클래스는 인스턴스 생성이 불가하다 new 생성 불가
(아래의 예시에서 Desktop클래스와 MyLaptop클래스만 인스턴스 생성이 가능하다)
- 구현부가 다 있는 클래스를 abstract 키워드를 이용하여 추상클래스로 만들면 이 클래스는 상속만을 위한 클래스로 사용된다.
메서드 선언 : 변환타입, 메서드이름, 매개변수로 구성
메서드 정의 : 메서드 구현(implementation)과 동일한 의미 구현부 body를 가짐
왜 추상메서드를 만드는가?
공통으로 쓸 메서드는 구현
어떻게 쓸지 모르는 메서드는 추상메서드로 지정하고 하위 클래스에게 책임을 위임한다(상속받는 클래스가 구현)
ex)
int add(int x, int y); //선언<-추상메서드 (구현부가 없기 때문에 추상적이다)
추상클래스 : 추상메서드를 가진 클래스
abstract 예약어를 사용
package Basic_Grammar.chap3_OOP.ch06_abstract;
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn(){
System.out.println("전원을 켭니다.");
}
public void turnOff(){
System.out.println("전원을 끕니다.");
}
}
package Basic_Grammar.chap3_OOP.ch06_abstract;
public class Desktop extends Computer{
@Override
public void display() {
System.out.println("Desktop display");
}
@Override
public void typing() {
System.out.println("Desktop Typing");
}
}
abstract 메서드 말고도 overriding할 수 있다. (상속받은 거니까)
package Basic_Grammar.chap3_OOP.ch06_abstract;
public abstract class Laptop extends Computer{
@Override
public void display() {
System.out.println("Laptop display");
}
}
abstract클래스의 abstract매서드를 다 구현하지 않았을 때 다시 abstract처리할 수 있다
package Basic_Grammar.chap3_OOP.ch06_abstract;
public class MyLaptop extends Laptop{
@Override
public void typing() {
System.out.println("MyLaptop typing...");
}
}
package Basic_Grammar.chap3_OOP.ch06_abstract;
public class ComputerTest {
public static void main(String[] args) {
Desktop desktop=new Desktop();
MyLaptop myLaptop=new MyLaptop();
desktop.display();
desktop.typing();
desktop.turnOff();
myLaptop.display();
myLaptop.turnOn();
}
}
'JAVA > Java2021-2' 카테고리의 다른 글
인터페이스를 왜 사용하는가? (0) | 2021.11.11 |
---|---|
인터페이스 (0) | 2021.11.11 |
객체 지향 -4 DownCasting(다운캐스팅), instanceof (0) | 2021.11.10 |
객체 지향 -3 IS-A 관계, HAS-A 관계 (0) | 2021.11.10 |
객체 지향 -2.1 다형성을 사용하는 이유 (0) | 2021.11.10 |