1. 추상 클래스란?
* 추상은 실체간의 공통된 특성을 추출해낸 것을 말한다.
- 추상클래스는 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상클래스라고 한다.
- 추상클래스는 실제 클래스의 부모 역할을 한다.
- 상속해서 공통적인 필드나 메소드를 물려 받을 수 있음
예시
public abstract class Animal {
public void breath(){
System.out.println("숨을 쉽니다!");
}
//추상 메소드 선언
abstract void sound();
}
public class Cat extends Animal {
@Override
void sound () {
System.out.println("야옹야옹");
}
}
public class AnimalExample {
public static void main (String[] args) {
Cat cat = new Cat();
cat.breath();
cat.sound();
animalSound(new Cat());
}
public static void animalSound (Animal animal) {
animal.sound();
}
}
2. 인터페이스의 역할
- 인터페이스는 사전적으로 두 장치를 연결하는 접속기를 뜻한다.
- 객체를 연결하는 역할
- 인터페이스로 다형성 구현 가능함
public interface RemoteControl {
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void setVolume(int volume);
default void setMute(boolean mute){
if(mute){
System.out.printf("무음 처리합니다");
setVolume(MIN_VOLUME);
}else {
System.out.println("무음 해제합니다");
}
}
static void changeBattery() {
System.out.println("리모콘 건전지를 바꿉니다");
}
}
public class Television implements RemoteControl {
private int volume;
@Override
public void turnOn(){
System.out.println("티비를 켠다");
}
@Override
public void turnOff () {
System.out.println("TV를 끕니다");
}
@Override
public void setVolume (int volume) {
if(volume>RemoteControl.MAX_VOLUME) this.volume = RemoteControl.MAX_VOLUME;
else if(volume<RemoteControl.MIN_VOLUME) this.volume = RemoteControl.MIN_VOLUME;
else {
this.volume = volume;
}
System.out.println("현재 티비 볼륨: " + this.volume);
}
}
3. 강제 타입 변환
public class CastingExample {
public static void main (String[] args) {
Vehicle vehicle = new Bus();
vehicle.run();
Bus bus = (Bus) vehicle;
bus.run();
bus.checkFare();
}
}
public interface Vehicle {
void run();
}
public class Bus implements Vehicle {
@Override
public void run () {
System.out.println("버스가 달립니다");
}
public void checkFare(){
System.out.println("승차요금을 체크합니다");
}
}
출력 :
버스가 달립니다
버스가 달립니다
승차요금을 체크합니다
4. 다형성
- 다형성이란 사용 방법은 동일하지만 다양한 결과가 나오는 성질
메소드 재정의 + 자동 타입 변환 -> 다형성
- 인터페이스의 추상 메소드는 구현 클래스에서 재정의를 해야함
- 재정의되는 내용은 구현 클래스마다 다름
'🍎 Backend > JAVA' 카테고리의 다른 글
[JAVA] 람다(Lambda)와 스트림(Stream) (0) | 2025.01.09 |
---|---|
[JAVA] CS면접대비 자바와 객체지향 정리 (0) | 2025.01.02 |
[JAVA] 해시 맵 (0) | 2023.12.11 |
[JAVA] 메모리 관리 & call by value (0) | 2023.12.08 |
[Java] 컴파일 과정 (0) | 2023.12.04 |