cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • beautifulsoup
  • javascript
  • 크롤링
  • 차원축소
  • 삼성SDS
  • 브라이틱스
  • 삼성SDS 브라이틱스
  • 머신러닝
  • 데이터 사이언스
  • Brightics AI
  • Brightics
  • react
  • 브라이틱스 스튜디오 사용법
  • web
  • 인공지능
  • 생활코딩
  • 브라이틱스 튜토리얼
  • 브라이틱스 스튜디오
  • Brightics Studio
  • 데이터분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

[Java] 참조형식과 호출되는 메서드의 관계
Programming/Java

[Java] 참조형식과 호출되는 메서드의 관계

2020. 7. 4. 20:27
반응형

아래와 같은 부모, 자식 클래스가 있다고 가정하자.

public class Parent {
    // 생략
}

public class Child extends Parents {
    // 생략
}

 

그럼 당연히 아래와 같이 부모, 자식 클래스의 각 인스턴스 변수(parent, child)를 생성할 수 있다.

public class Main {

    public static void main(String[] args) {
        Parent parent = new Parent();
        Child  child = new Child();
    }
}

 

그렇다면 아래와 같이 인스턴스를 생성할 수 있을까?

public class Main {

    public static void main(String[] args) {
        Parent A = new Child();
        Child  A = new Parent();
    }
}

정답은 Parent A = new Child(); 만 가능하다.

 

Why?

Child 클래스는 Parent 클래스의 자식이기 때문에 데이터를 담고 있는 크기가 적어도 같거나 클 수밖에 없다. 

* 자식 클래스가 새로운 메서드나 필드를 선언하는 순간, 자식 클래스의 데이터가 부모 클래스가 가진 데이터의 양보다 커질 수밖에 없다.

 

자바에서는 new 연산자를 통해 인스턴스를 생성하는데 이는 곧 해당 클래스를 참조한다('난 네가 가진 필드와 메서드를 사용할거야!')는 의미이기도 하다.

// A의 자료형이 a라는 인스턴스 변수는 A라는 클래스(자기 자신을)를 참조한다.
A a = new A();

 

자바에서는 어떤 자료형의 인스턴스 변수가 어떤 클래스를 참조할 때는 참조되는 클래스의 크기가 더 커야한다.

 

정리하자면, 참조되는 클래스의 데이터가 더 커야하므로 자식 클래스의 자료형을 가진 인스턴스 변수가 부모 클래스를 참조할 수 없고 부모 클래스의 자료형을 가진 인스턴스 변수는 자식 클래스를 참조할 수 있다.

 


Parent 클래스에 "Hello"를 출력하는 printHello 메서드가 있다고 가정해보자. 

그리고 Child 클래스가 printHello 메서드를 오버라이딩하여 "Hello Hello"를 출력한다고 가정해보자.

 

그렇다면 Parent A = new Child(); 이와 같이 A라는 인스턴스 변수를 만들고 A.printHello 함수를 호출하면 어떻게 될까?

정답은 오버라이딩 된 "Hello Hello"를 출력한다.

이유는 자바는 참조형식의 함수보다 객체형식의 함수 호출을 우선으로 하기 때문이다.

반응형
저작자표시 (새창열림)

'Programming > Java' 카테고리의 다른 글

[Java] Enum 클래스에 대해 알아보자  (0) 2020.09.14
[Java] 메서드 정적 바인딩과 동적 바인딩  (0) 2020.07.05
[Java] Log4j에 대해 알아보자  (0) 2019.11.11
[JAVA] 날짜와 시간 다루기(java.time)  (0) 2019.11.09
[JAVA] TCP 통신 소켓 프로그래밍(양방향 통신)  (0) 2019.08.02
    'Programming/Java' 카테고리의 다른 글
    • [Java] Enum 클래스에 대해 알아보자
    • [Java] 메서드 정적 바인딩과 동적 바인딩
    • [Java] Log4j에 대해 알아보자
    • [JAVA] 날짜와 시간 다루기(java.time)
    cbw1030
    cbw1030

    티스토리툴바