기록양식 (TIL)
-사용 개념
-의문점 or 문제
-시도해 본 것들(+응용) or 삽질
-해결
-알게 된 점(회고)
상속의 개념 : 부모클래스와 자식클래스로 나뉘어, 자식은 부모의 자원을 쓸 수 있지만, 부모는 불가
추상클래스 :abstract
interface
를 사용하여 부모클래스의 역할을 한다. (interface가 더 엄격)
헷갈리는 문법 정리
공통 특징 : 추상클래스(부모클래스)를 쓰는 자손클래스(하위클래스)는 반드시 메서드를 확장시켜서 사용
🤷♂️ > 부모에서 행동을 정의해놓지 않았기 때문에 ->오버라이딩
이 필수
변수, 메서드 -> 정의만 해놓기 때문에 -> 따로 객체를 생산할 수 없다. (추상 클래스만으로는 불가)
사용하는 이유 :코드의 확장성
,다형성
,구조설계의 일관성
을 가져갈 수 있다.
abstract / interface
abstract | interface |
---|---|
단일상속 | 다중상속 |
일반메서드,필드,생성자도 포함가능 | 오직 상수와 추상 메서드만 사용가능(엄격한 규정) |
abstract class + extends | interface + implements |
우선순위가 더 높다 | ex)class extends Person implements A,B |
abstract class Allowance{
abstract void in();
void out(){};
}
class child extends Allowance{
void in(){System.out.println("+10,000");}
}
//--> class,method 앞에 abstract를 붙인다. extends를 사용한다.
//--> 추상메서드는 body가 없다.
interface Salary{
public abstract void income();
}
class Adult implements Salary{
public void income(){System.out.println("+4,000,000");}
}
// -- > 더 엄격한 추상클래스 interface는 추상메서드, 상수만 사용한다.
// --> 그래서 누구나 다 쓸 수 있어야 하기에 항상, public abstract가 붙는다.
// --> 항상 붙는다는 말은 ? 생략 가능
// --> 자식 클래스는 public의 접근제한자를 줄일 수 없기 때문에 가져가야 한다.
// --> 덜 엄격한 abstract는 안써도 작동은 한다.
public static void main(String[] args){
Allowance a = new Child();
a.in();
// --> a의 속성에 속해있는 메서드값 출력 , 다형성의 원리
}
inteface Allowance{
(public static final) int a = 100; // --> 필드 또한 상수로만 선언되기 때문에, 생략 가능
(public static)void in(); // --> 생략 가능
}
- 인터페이스는 모든 메서드에서 공개적으로 사용되어야 되기 때문에,
public
이 필요, 자식메서드 또한 동일
- 상속클래스가 아닌 부모클래스는 메서드에 바디를 갖는다.
- 부모클래스의 역할을 하는 상속클래스는 추상메서드를 갖는다.
abstract
interface
에서abstract
는 일반 필드,메서드, 생성자를 가질 수 있다.interface
는 변하지 않는 상수와 추상 메서드만 가질 수 있다. ->public
접근제한자- 자식클래스는 반드시
오버라이딩
하여 재정의 하여야 한다.