본문 바로가기
국비/JAVA

JAVA : 상속

by suehyune12 2022. 8. 8.

목차

  • 상속(inheritance)
    • super
  • 다형성(polymorphism)
  • Storage class(저장 기억 부류)
    • 지역변수, 매개변수
    • 전역변수, 정적변수(static)
  • 접근자
  • casting

 


 

상속 (inheritance)



1. 기존에 선언된 클래스의 필드를 새롭게 만들 클래스의 필드로 사용하고자 할때
2. 여러 클래스 선언 시 필드가 겹치는 경우, 부모 클래스를 먼저 선언하고
   공통 필드를 묶어서 자식 클래스들에게 상속해준다.

 

상속 문법

상속 문법

 

 

A 는 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스 라고 하고, 
B 는 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스 라고 한다.

 

 

super( ); 

   
   자식 클래스 타입의 객체로 부모필드에 접근할 수 있다.
   하지만 자식 생성자만 호출하기 때문에, 자식 필드만 메모리에 할당된다고 생각할 수 있다.
   사실 자식 생성자에는 항상 부모 생성자를 호출하기 때문에
   자식 생성자 호출 시 부모와 자식 필드 모두 메모리에 할당된다.
   이때 부모 생성자를 호출하는 방법은 super( )를 사용하는 것이다. 
   만약, super()를 작성하지 않더라고 컴파일러가 자동으로 작성해준다.

 

 

다형성(polymorphism)

 

1. 오버로딩

 

2. 오버라이딩( = 부모껄 무시하고 다시 만든다, 재정의 )

부모 필드에서 선언한 메소드를 자식필드에서 수정하고자 할 때 재정의를 해야한다.
이는 자식에서 부모필드의 메소드와 동일한 이름으로 선언하는 것이다.
부모 필드가 메모리에 먼저 할당되고 a라는 메소드가 먼저 올라간다고 하면,
자식 필드가 메모리에 할당되면서 재정의한 a메소드가 새롭게 만들어지는 것이 아니라
기존에 할당된 a메소드 저장공간에 새롭게 재정의한 자식 필드의 소스코드 주소가 들어가게 된다.
따라서 자식 객체로 a메소드에 접근하면 자식 필드에서 재정의한 소스코드의 내용이 읽히게 된다.

※ 메소드를 더이상 이름뒤 소괄호가 아닌 저장공간이라고 얘기하자 ※

앞서 배운 상속을 테스트 해보자

 

 

실습 

부모 클래스

 

자식 클래스

 

메인

 


 

Storage class(저장 기억 부류)

 

  Stack Data영역
  지역변수 ,  매개변수  전역변수 ,  정적변수(static)
초기화  직접  자동
생명주기    }  을 만나면 끝   new ,  프로그램 종료 시 

 

  • 전역변수
    • 생성자를 통해 메모리에 할당되며, 객체가 각각 가지고 있는 변수
  • static 변수(정적변수)
    • 컴파일러를 통해 메모리에 1개 할당되며, 모든 객체가 공유하는 변수
      ex) Integer.parseInt();

 

실습을 통해 전역변수와 정적변수의 차이점을 알아보자.

 

전역변수는 new를 만나는 순간 종료가 된다. 
                                        그러므로 결과는  11, 12, 13, 14, 15 , 11, 12, 13, 14, 15 로 반복된다.                                                                                                                                                   

전역변수

 

반대로 정적변수는 new를 만나도 종료되지 않고,  프로그램 종료시 종료된다.
그러므로 결과는 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 이 출력된다.

정적 변수(static)

 


 

접근 권한 제어자 ( 접근자 )

 

  • default : 다른 패키지에서 접근 불가
  • public : 모든 곳에서 접근 가능, 해당 파일의 메인 클래스일 경우만 사용
  • protected : 다른 패키지에서 접근 불가, 자식(extends)은 가능
  • private : 다른 클래스에서 접근 불가, 메소드로만 접근하자!

 


 

Casting

 

casting 설명

 

  • up casting : 자식 값을 부모 타입으로 형변환
    • ex) A는 부모, B는 자식,  A a = new B ( );
  • down casting : up casting 된 객체를 자식 타입으로 형변환
    • ex) B b = (B) a;
  • ※ 부모 값을 자식 타입으로 형변환 시 오류 ※ 
    • ex) B b  = new A( ); - > 오류

 

Casting을 사용하는 이유

모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다.
하지만 자식끼리는 서로 타입이 다르기 때문에 한번에 전달받을 수가 없다.
이때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에
모든 자식을 받을 수 있게 된다.
만약 up casting으로 자식 값을 전달받았다면, 자식에서 새롭게 구현한 기능들은 
사용할 수 없기 때문에 down casting을 통해서 복구하고 사용한다.

 

casting 종류

 

객체 간 타입 비교( instanceof )

a instanceof A : 조건식, 참 또는 거짓 중 하나가 나오는 식

- a가 A타입이면 true
- a가 A타입이 아니면 false

객체 간 타입 비교

 

 

'국비 > JAVA' 카테고리의 다른 글

JAVA : 예외처리 & API & Object 클래스  (0) 2022.08.11
JAVA : 추상 클래스  (0) 2022.08.10
JAVA : 클래스  (0) 2022.08.08
JAVA : 메소드  (0) 2022.08.02
JAVA : 2차원 배열  (0) 2022.08.02