JAVA 스터디 4주차

이봐요이상해씨·2022년 1월 5일

JAVA

목록 보기
4/6

ex1

  • 상속
    • 이 부모로부터 무언가를 물려받는 것이다.
    • 자식 클래스는 부모 클래스로부터 메소드와 필드를 물려받아 사용한다.
    • 부모 클래스는 자식 클래스에서 정의한 메소드나 필드를 사용하지 못한다
  • 하위클래스의생성순서 상위클래스 생성후 하위클래스 생성
  • 상위클래스생성자호출 상위클래스의 생성자가 호출된 후 하위 클래스의 생성자가 호출
  • suepr super() 는 자신의 부모클래스의 생성자를 호출하는 녀석입니다
  • protected 외부에선 접근을 막지만 하위 클래스에선 접근이 가능하도록해주는 접근제어자

ex2

  • overriding 하위클래스에서 상위클래스의 메서드를 재정의 할 수 있다
  • 업캐스팅

  • 묵시적형변환

    • 특별한 처리 없이 형변환이 되어 일어나는 것

    • 상속 관계에서는 모든 하위클래스는 상위클래스로 묵시적 형변환이 가능함

      ex) Customer custom = new VIPCustomer();

    • 상위클래스 형으로 변수 생성, 하위클래스 인스턴스 생성

    • custom 변수가 가르키는 범위는 Customer클래스의 멤버 변수와 메서드로 제한

    • VIP 인스턴스가 선언되어 확정된 멤버 변수와 메서드는 메모리에 있음

    • 하지만 Customer를 자료형으로 하기 때문에 그 범위가 제한됨

  • 상속에서의 상위클래스와 하위클래스의 메모리 상태

    상위클래스의 인스턴스가 먼저 생성되고 (가장 위에있음)

    그 아래에 하위클래스 인스턴스가 메모리에 자리잡음

  • 가상메서드

    Customer custom = new VIPCustomer();

    에서 VIPCustomer클래스의 메서드가 호출됨

    • 자바는 항상 인스턴스 메서드가 호출됨(VIPCustomer) 이런 기법이 가상메서드

      정의 :

    • 함수 혹은 메서드 이름이 그 자체로 주소역할을 함 따라서 같은이름을 갖는 메서드는 존재할수없음

    • Override할 경우 같은 이름의 다른 주소값을 갖는 메서드가 재정의됨 따라서 같은 이름의 다른 기능하는 메서드를 갖을 수 있음

    • 이렇게 Override 할 수 있는 메서드를 가상 메서드라함

  • 다형성

    • 하나의 코드가 여러 자료형으로 구현됨
    • 같은 코드에서 여러 실행 결과가 나올 수 있음

EX6

  • 다운캐스팅
    • 묵시적으로 상위클래스 형변환된 인스턴스가 원래형(자료형)으로 변환되어야 하는 경우
    • 다운캐스팅시 묵시적이 아닌 명시적으로 되어야 한다.

상속시 메모리에서 일어나는 일

메모리 종류 : 스태틱, 스택, 힙

힙 : 자식 생성시 → 부모도 같이 생성

스태틱 : 자식 설계도 올라갈시 → 부모의 설계도 같이 올라감

스태틱영역 타입의 메소드만 호출 가능

객체의 참조주소 : 부모의 주소

다형성시 메모리

다형성 발생시키는 원인

  1. 부모 타입으로 자식의 객체 생성 가능
  2. 부모 타입으로 자식의 객체 받는게 가능
  3. 부모 메서드로 자식 메서드 호출

설계도 영역 : 부모만

힙 : 자식 + 부모 객체

가상함수로 선언 → 상위클래스가 이걸로 지정되어야

하위클래스 함수를 호출 할 수 있다.

가상함수는 가상함수 테이블이 있다.

이 테이블에 각 클래스가 가지는 주소값 저장

→ 해당 인스턴스 함수 호출시 재정의된 경우 재정의 인스턴스가 호출됨

자바는 모든 메서드가 가장 메서드

→상속 관계시 하위클래스에 재정의된 메서드가 있음 →

상위클래스 타입 선언되었어도 하위클래스 인스턴스로 생성, 항상 재정의된 메서드 실행

따라서 다형성은 바로 이 가상함수 테이블에서처럼 재정의된 메서드 주소를 호출함으로서 같은 메서드도 다양하게 구현되어 사용할 수 있음

//박은종멘토 가상함수

가상 함수(virtual function)에 대하여

//클래스 메모리

Java 상속

0개의 댓글