[TIL] 상속, 추상클래스,interface

이해찬·2023년 7월 6일
0

TIL

목록 보기
6/20

23.07.06 - D+36, 상속, 추상클래스,interface

기록양식 (TIL)
-사용 개념
-의문점 or 문제
-시도해 본 것들(+응용) or 삽질
-해결
-알게 된 점(회고)

상속 클래스-> 추상클래스

상속의 개념 : 부모클래스와 자식클래스로 나뉘어, 자식은 부모의 자원을 쓸 수 있지만, 부모는 불가
추상클래스 : abstract interface 를 사용하여 부모클래스의 역할을 한다. (interface가 더 엄격)
헷갈리는 문법 정리

abstract / interface 의 차이점? 왜 사용하지?

공통 특징 : 추상클래스(부모클래스)를 쓰는 자손클래스(하위클래스)는 반드시 메서드를 확장시켜서 사용
🤷‍♂️ > 부모에서 행동을 정의해놓지 않았기 때문에 -> 오버라이딩이 필수
변수, 메서드 -> 정의만 해놓기 때문에 -> 따로 객체를 생산할 수 없다. (추상 클래스만으로는 불가)
사용하는 이유 : 코드의 확장성, 다형성, 구조설계의 일관성을 가져갈 수 있다.

abstract / interface

abstractinterface
단일상속다중상속
일반메서드,필드,생성자도 포함가능오직 상수와 추상 메서드만 사용가능(엄격한 규정)
abstract class + extendsinterface + 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 접근제한자
  • 자식클래스는 반드시 오버라이딩하여 재정의 하여야 한다.
profile
디자인에서 개발자로

0개의 댓글