Language/Java

'Do it 자바프로그래밍 입문' 8장 정리

ABCD 2022. 9. 19.

상위클래스

  • 하위 클래스 보다 일반적인 개념
  • 'parent class'
  • 'super class'
  • 'base class'

하위클래스

  • 상위 클래스 보다 구체적인 개념
  • 'child class'
  • 'sub class'
  • 'derived class'

클래스 삭송 문법(예약어 extends)

class B extends A {
}
  • 속성과 기능이 이미 구현되어 있는 A에 필요한 추가 속성과 기능을 가진 B를 구현하는 것!!
  • 예약어 뒤에 따로오는 클래스는 반드시 한개!!

하위클래스 생성 과정

  • 반드시 상위 클래스의 생성자가 먼저 호출된다.
  • 상위 클래스의 변수가 메모리에 먼저 생성되기 때문에 하위 클래스에서 이 값들을 사용가능 한 것!!

예약어 super()

  • 하위 클래스에서 상위 클래스로 접근 할 때 사용
  • 상위 클래스의 생성자 호출시에도 사용
  • 디폴트 생성자의 경우 컴파일러가 자동으로 상위 클래스의 생성자를 호출한다
public String showVIPInfo(){
	return super.showCustomerInfo() + "담당하는 상담사 아이디는" + agentID;
   }

상위 클래스로 묵시적 형변환

  • 상속받는 클래스는 상위 클래스의 기능을 모두 사용가능 하고 추가로 더 많은 기능을 구현 할 수 있다. 
Customer vc = new VIPCustomer();
  • 하위 클래스는 하위클래스형이면서 상위클래스형
  • 클래스가 형변환시 선언한 클래스형에 기반하여 멤버변수와 메서드에 접근. 단, 가르킬 수 있는 변수와 메서드는 Customer형 뿐!!

  • 상속계층이 여러 단계일 경우에도 형변환은 묵시적으로 이루어 진다.
Primate aHuman = new Human();
Mammal mHuman = new Human();

// 둘다 가능!!

메서드 오버라이딩

  • 상위 클래스 메서드를 재정의 하는 것
  • 상위 클래스에서 정의한 메서드와 하위클래스에서 구현할 내용과 맞지 않을 경우 사용
  • 상속에서 상위 클래스와 하위클래스의 이름이 같은 메서드가 존재할 때 호출되는 메서드는 인스턴스에 따라 결정된다.

애그테이션

  • "주석"이라는 의미
  • @ + '애노테이션 이름'으로 표현
  • 컴파일러에게 특정한 정보를 제공해주는 역할

가상 메서드

  • 가상 메서드 테이블이 만들어지고 각 테이블은 각 메서드 이름과 실제 주소가 짝을 이루어 호출하는 원리
  • 재정의되지 않은 메서드의 경우 메서드의 주소가 같다. (상위 클래스의 메서드가 호출됨)

다형성

  • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
  • 상위 클래스에서 공통 부분의 메서드를 제공, 하위 클래스에서는 그에 기반한 추가요소를 덧붙여 구현
  • 필요에 따라 상속받는 모든 클래스를 하나의 상위 클래스로 처리
  • 장점 : 코드 양 감소, 유지보수의 용이, 프로그램 확장성 향상

IS-A관계

  • 일반적인 개념과 구체적인 개념의 관계

HAS-A관계

  • 한 클래스가 다른 클래스를 소유한 관계
class Student{
	Subject majorSubject;
}

상속, 항상 사용하는 것이 좋을까?

  • No!!
  • IS-A관계에서 사용하는 것이 가장 효율적
  • 단순히 코드 재사용 목적으로 서로 관련이 없는 클래스들을 상속관계로 사용하는 것은 좋지 않은 코드!!

다운캐스팅(예약어 intanceof)

  • 상위 클래스로 형변환한 하위 클래스를 다시 원래 자료형으로 형번환 하는 것
Animal hHuman = new Human();
	if(hAnimal instanceof Human){
    Human human = (Human)hAnimal;
}
  • 상위 클래스로 형변환과 달리 명시적으로 작성해주어야 한다. ex) Human human = (Human)hAnimal
728x90
반응형

댓글

💲 추천 글