기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)
abstract
를 굳이 사용하는 이유:abstract
를 상속하는 하위 클래스는 반드시 그 메서드를 확장시켜 사용해야함
강제성 : 반드시 가져가야 하기 때문에 코드의 확장성과, 설계의 일관성을 가질 수 있다.강제성을 안가져가는 경우는?
🤷♂️ 만약에 자손클래스가 오버라이딩을 하지 않는다면?
->오류 발생
--> 해결 방법으로는 자손클래스에도 abstract를 붙인다.
abstract class Army{
abstract void specialties();
}
class DriverSolider extends Army{
void specilties(){System.out.println("운전을 합니다.");}
}
class CombatSolider extends Army{
void specilties(){System.out.println("전투 훈련을 합니다.");}
}
위에처럼 자손은 반드시 메서드를 가져가서
오버라이딩
해야하나, 만약에 오버라이딩을 하지 않는다면?
abstract class Army{
abstract void specialties();
}
class DriverSolider extends Army{
void specilties(){System.out.println("운전을 합니다.");}
}
class CombatSolider extends Army{
void specilties(){System.out.println("전투 훈련을 합니다.");}
}
abstract class TemporarySolider extends Army{
void act(){System.out.println("막사에서 안정을 취한다.")}
// --> 군대에 속하는 임시병사라면?
// --> abstract method를 사용할 수도 있고, 일반 메서드를 사용할 수도 있다.
}
class Citizen extendsTemporarySoldier{
void specialties(){System.out.println("시민입니다.");}
act 메서드는 일반메서드이기 때문에 그냥 상속
//--> 추상클래스(부모)의 자식 --> 자식클래스는 가능할까?
// --> 가능하나 abstract메서드 오버라이딩, 해야한다 -->위의 2개의 클래스 전부
// --> Citizen > TemporarySolider > Army
}
abstract
는 추상클래스(부모)로서 상속받는 하위클래스는 반드시 메서드를 오버라이딩 해야한다.- 굳이 추상클래스를 사용하는 이유는 코드의 강제성을 통해 일관성, 확장성 등을 가질 수 있기 때문이다.
- 하위클래스가 오버라이딩 하지 않으려면
class
앞에abstract
를 통해 추상클래스의 성격을 가지면 된다.- 하위클래스의 하위클래스는 결국에는 본인이 상속받은 것을 다 쓸 수 있다. 추상메서드라면 그것은 또한 오버라이딩을 해야 한다.