본문 바로가기
JAVA-Spring/상속성

JAVA 자바 [ 객체 지향 프로그래밍 ] 상속과 생성자와의 관계

by Super Santj 2019. 7. 19.

** 중요 **

1. 상속은 포함관계와 전혀 연관이 없다 헷갈리면 안된다. 상속은 is a 관계 설정이다 라는 말을 주로 한다.

즉 상속을 하기 위해선 is a 관계가 반드시 설정이 되어야 한다. is a는 논리적인 관계인것이다. 물리적일 수 없다.

예를 들어 명제라는게 있다. 수학 시간 우리는 명제라는것을 배웠었다.

p는 q 이다. (참), q는 p 이다. (참 또는 거짓 일 수도 있다. 이런건 보통 거짓이다.)

즉 is a관계 설정은 위에 명제를 예를들어 말한것 처럼 관계 설정이 논리적으로 작용 한다는 것이다.

class Manager extends Employee{

        팀장=p                직원=q

}

일때 팀장은 그 회사의 직원이다. (참)

직원은 그 회사의 팀장이다. (항상 팀장은 아니다. / 거짓 )

class A extends B{

}

2. 포함 관계 => 두 클래스 사이를 연결시키는 방법 (=> 멤버변수를 선언=>연결)

** 중요 **

그 다음으로

InheriTest.java 해당 클래스를 생성하여 상속과 생성자와의 관계를 고찰해보자.

1.자바에서 클래스를 작성 => java.lang.Object => 조상
                                                  =====  상속을 받아서 작성

2. 상속관계에서 자식 클래스의 객체를 생성 해보자.
    ======
부모클래스의 생성자를 먼저 호출하고 나서 자식클래스의 생성자를 호출한다.

이러한것을 생성자 호출 메카니즘이라 불린다.

그리고 가장 기본적인 패키지의 클래스는 자동인식을 한다. 하지만 그 외에 패키지는 무조건 import를 사용하여야한다.
java.lang외의 다른 패키지의 클래스는 반드시 import를 사용해서 불러온다 는것을 반드시 기억해야한다.

this 는 자식클래스의 객체를 가리키는 예약어

super 는 부모 클래스의 객체를 가리키는 예약어

super() 는 부모클래스의 생성자를 호출하라는 문장이고

super(1) 은 부모클래스의 인수 1개짜리 생성자를 호출하라 라는 의미이고

super (1, "홍길동") 은 부모 클래스의 인수 2개짜리 생성자를 호출 하라는 문장이다.

즉 상속의 원리는 아래와 같다.

 객체.toString() =>부모의 toString()호출
                                                                            메모리의 주소값
 getClass().getName() + '@' + Integer.toHexString(hashCode())
 ==============                          16진수를 16진수문자형태로 변환
 객체와 연관이 있는 클래스명@ 16진수문자열
       ==>주소값을 알려주는 기능

c=>j0719.Child@6d06d69c
c.toString()=>j0719.Child@6d06d69c
                      -------------------------->j0719패키지에 있는 Child클래스를
                                만들어진 객체면서 주소값 6d06d69c에 만들어짐을 알려준다.

추가 꿀팁으로는 extends 안에서 커서를 놓고 ctrl + space 를 누르면 자동으로 오버라이딩 할수있는 내용이 목록으로 호출이 된다.

그리고 부모의 메소드의 내용을 오버라이딩을 하게되면 => 자식도 변경된 내용을 상속 받기 때문에 변경이 된다.

댓글