추상 메서드를 가질 수 있다.
객체를 생성할 수 없다.
일반 클래스의 부모 클래스가 될 수 있다.
- 자식 클래스들에게 강제로 추상 메서드를 구현하게 만든다.
(중요)
모든 객체들이 공통된 사용법(메소드)를 가지게 된다.
- 일종의 규격을 만든다.
abstract class 클래스이름 {
abstract 메소드선언; // 메소드의 몸체는 없음
abstract 메소드선언; // 메소드의 몸체는 없음
}
abstract class Mouse { //자식 클래스의 추상 메소드를 강제로 구현하게 만든다.
public abstract void click(); //자식의 객체 클래스를 표준화 시켜줌
}
class G305 extends Mouse {
public void click() {
System.out.println("저렴한 스위치를 사용해서 클릭합니다.");
}
}
//결과
저렴한 스위치를 사용해서 클릭합니다.
❗주의 할 점❗
: 추상 클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐, 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위 클래스에서 좀 더 구체화 해야한다!
이때 추상 메서드를 하나도 빠짐없이 전부 구현 해야 객체를 생성할 수 있다.
추상클래스의 일종
인터페이스 내의 메서드는 모두 추상메서드
extends를 이용하여 상속을 하는 것이 아니라 implements를 이용하여 구현한다.
interface Phone{
//인터페이스 멤버 선언
//- 추상 멤버만 선언할 수 있다.
// public abstract void aaa();
// public void bbb(); //모두 추상 메서드이기 때문에 abstract 생략 가능
// void ccc();//모두 접근지정자가 public이기 때문에 public 생략 가능
//인터페이스는 구현된 멤버를 선언할 수 없다.
// public int a;
// public int b;
//
// public void ccc() {
//
// }
void powerOn();
void powerOff();
void call();
}
class Iphone14 implements Phone {
@Override
public void powerOn() {
System.out.println("전원 on");
}
@Override
public void powerOff() {
System.out.println("전원 off");
}
@Override
public void call() {
System.out.println("전화 걸기");
}
}
class S23 implements Phone{
@Override
public void powerOn() {
System.out.println("전화기를 켭니다.");
}
@Override
public void powerOff() {
System.out.println("전화기를 끕니다.");
}
@Override
public void call() {
System.out.println("통화를 겁니다");
}
}
//main
Iphone14 p1 = new Iphone14();
p1.powerOn();
p1.powerOff();
p1.call();
S23 s1 = new S23();
s1.powerOn();
s1.powerOff();
s1.call();