[java] 상속

eunu·2024년 1월 29일
0

JAVA

목록 보기
3/21

객체(인스턴스)가 어떻게 생성되는가?

super() : 부모생성자 호출하여 값 넘겨주기

this() vs super() : 내 생성자 중에서 불러오냐, 부모생성자 중에서 불러오냐 차이

부모 클래스인 Car가 힙영역에 먼저 생성된 뒤에, 자식클래스가 뒤에 추가되는 형태로

객체가 생성된다.

부모 생성자가 항상 먼저 호출되기 때문에,
부모 생성자에 매개변수가 있다면,
반드시 부모생성자를 호출해서 값을 넘겨줘야한다.

오버라이딩이란?

오버라이딩 : 상속관계에서 메서드/를 재정의하여 사용하는 것

클래스 변수를 지정할 때 기본값을 설정하지 않는 이유

  • 아무리 자식 상속값들에서 같은 값을 사용하더라도.
    • protected String name; ← 요런 설계도 형태일 때 굳이 기본값을 설정해서 메모리를 낭비할 필요 없음
    • 해당 단계에서 기본값을 설정하지 않는 것은 설계 1,2 에서 설명한 바와 같이 좀 더 값을 단계에 따라 체계적으로 관리하고 유효성 검사등의 유용한 기능을 이용할 수 있도록 함과 동시에
    • 클래스를 생성할 때마다 안쓸 수도 있는 변수에까지 값이 중복적으로 할당되는 메모리 낭비 현상을 막기 위함이기도 함
      • 예를 들어 부모클래스에서는 name, grade, price 세가지 변수를 사용하지만, 이를 상속받은 자식 클래스에서는 name과 price만 사용할 수도 있는 것. 그러나 변수 선언단에서 이 부분에 값을 할당해버리면, 사용하지 않는 부분에서도 메모리가 낭비되게 됨.

배열선언

// 배열선언
		Customer cusList[] = new Customer[5];

자식 자료형 → 부모 자료형 배열

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Customer cusShin = new Customer("신사임당");
		Customer cusLee = new Customer("이순신");
		VipCustomer cusKim = new VipCustomer("김유신", 100);
		GoldCustomer cusKang = new GoldCustomer("강감찬");
		GoldCustomer cusSae = new GoldCustomer("세종대왕");
		
		// 배열선언
		Customer cusList[] = new Customer[5]; 
		
		cusList[0] = cusLee;
		cusList[1] = cusShin;
		cusList[2] = cusKim;
		cusList[3] = cusKang;
		cusList[4] = cusSae;
		
		for(int i = 0; i<cusList.length;i++) {
			System.out.println(cusList[i].getName()+"의 할인 적용 구매액 : "+cusList[i].calc(100000));
			System.out.println(cusList[i]);
			System.out.println("=========================");
		}
  • 자식 자료형 -> 부모 자료형 : 자식 자료형을 부모 자료형에 값을 넣음
  • 상속관계에서는 객체의 자동형변환이 일어난다(자식이 부모형태로 변환됨)


자식이 부모로 형변환 되는 순간 자식에서 추가한 부분은 쓸 수 없어짐.

  • 부모의 클래스로 형변환이 된 자식객체는 부모의 멤버변수/메서드만 접근할 수 있음
    • 자식에서 새로 만든 멤버변수/메서드는 접근 불가능
      • 왜? 부모에는 자식에 대한 정보가 없음.
profile
Just Do It

0개의 댓글