728x90
상속을 구현하는 이유
  1. 부족한 부분을 채우기 위해
  2. 공통된 기능을 합쳐서 사용하기 위해

상속 관계 종류
  1. is a 관계
  2. has a 관계

상속 관계에서 자식은 자기 자신꺼를 먼저 사용한다. 자기께 없다면, 부모꺼를 사용하는 순으로 진행한다.

상속관계에서 부모를 부르는 방법은 없다. 하지만 간접적인 방법으로 부모를 부르는 방법 super()를 이용하면 가능하다.

 

상속 관계에서 생성자를 호출하는 순서는 자식 다음 부모 순이다. 하지만, 출력 결과를 확인하면 부모 호출이라는 출력문이 자식 출력문보다 먼저 출력된 것을 확인할 수 있다. 이는 부모 생성자가 먼저 생성된 것이 아니라 자식 생성자가 먼저 생성이 되었지만, 자식 출력문 바로 위에 자바에서 super()을 생략해 놓았기 때문이다.
상속관계에서 생성자를 호출하는 순서는 자식 다음 부모 순이다. 하지만, 


객체를 생성시키는 4가지 방법 (A가 부모, B가 자식일때)
1. A t1 = new A();
2. B t2 = new B();
3. A t3 = new B(); // up casting : t3는 A문법을 따르되 A, B 메모리를 사용한다.
4. B t4 = new A(); // down casting : t4는 B문법을 따르되 A 메모리를 사용한다.


자바에서는 4번 문법을 허용하지 않음.

 

up casting

t3.m1의 경우 m1이 Tiger에 없기 때문에 Animal의 m1을 출력하며, t3.m3의 경우 m3이 Tiger에 있기 때문에 Tiger의 m3이 출력된다.

 

Zoo 클래스에서 메소드 생성 시, 오버로딩으로 인자를 계속 생성해가며 만들어주어야지 동물 객체들을 인자로 넣었을때 짖는다.
여기서 Zoo 클래스에 메소드의 인자를 각 동물들의 부모 클래스인 Animal로 적어주면, 오버로딩으로 메소드를 일일히 적어주지 않아도 다양한 동물들이 짖는 프로그램을 만들 수 있다.
switch문을 사용하여 만드는 코드를 up casting을 사용하여 다형성 프로그램을 구현할 수 있다.

 

abstract

스코프가 없는 코드를 미완성 코드라고 하며, abstract는 이러한 미완성 코드를 미완성이라고 표기해준다. 메소드에 abstract을 붙였다면, 클래스에도 abstract을 표기해주어야 한다.

※ abstract 클래스는 코드가 미완성이기 때문에 객체를 생성할 수 없으며, 미완성 코드를 상속하는 자식클래스는 부모가 완성하지 않은 메소드를 완성해놔야한다.

@Override 는 Annotation으로 프로그래머에게 실수할 수 있는 상황을 방지하기 위해 사용된다.

오버라이딩 : 상속관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니처를 갖는 메소드로 다시 정의하는 것.

 

interface

interface 확장
  1. 익명 클래스
  2. 익명 객체
  3. 함수 인수로 코드를 전달

interface를 사용하여 익명 클래스, 익명 객체, 함수 인수로 코드를 전달한 코드 예시

 

다중 상속

Java에서는 다중 상속은 성립하지 않기에 하나의 클래스는 하나의 클래스만 상속받을 수 있지만, 인터페이스의 경우 여러개의 인터페이스를 상속받을 수 있다.

@FunctionalInterface는 반드시 함수 원형 1개만 넣는 것을 강요하기 위해 사용한다.

728x90

'웹 full stack 교육 > 이론' 카테고리의 다른 글

[Java] LinkedList  (0) 2021.09.01
[Java] 자바 기타  (0) 2021.08.30
[Java] 클래스[기본]  (0) 2021.08.27
[Java] 자바 문법[조건문, 반복문]  (0) 2021.08.26
[Java] 자바 문법[기초]  (0) 2021.08.25

+ Recent posts