day13

클래스 상속
	- 부모클래스의 멤버변수/메소드를 자식 클래스가 물려받는 것
	- 부모클래스의 모든 멤버변수/메소드를 물려 받을 수 있다(X) => 접근제한자가 private이면 물려받을 수 없다.
	- 부모클래스의 멤버변수/메소드를 선언하지 않아도 사용 가능
	- 자식클래스가 A, 부모클래스가 B일때.
	- 모든 클래스는 부모 클래스의 생성자를 호출한다.
	- super(); 를 통해 직접호출하지 않으면 부모클래스의 기본생성자를 자동으로 호출한다
	- 부모클래스는 하나만 존재 => 부모가 존재할 수 있고, 조부모가 존재할 수 있지만. 부모가 2분씩 있을 수 없다.
			가능한 예)	
			class A{}
			class AA extends A{}
			class AAA extends AA{}
			
			안되는 예)
			class B{}
			class C{}
			class BC extends B, C{}	//에러발생: 각각의 다른 부모클래스에 같은 이름의 메소드/변수들이 실행에서 충돌할 수 있음

	클래스 상속 문법	
		class A extends B{
	
		}

	상속을 사용할 수 있는 상황
		- A는 B이다. 가 성립하면 상속이 가능: is a 관례
	 	(자식클래스가 부모클래스의 하위내용이라면 포함된 내용이라면 가능하단 뜻)
		 
		 
	메소드 재정의(메소드 오버라이드 / 오버라이딩)
 		- 부모클래스의 메소드를 자식 클래스가 재정의 하는 것
 		- 부모클래스의 메소드와 선언이 똑같은 메소드를 입력하고 구현부를 수정
 
 			*final (=수정 할 수 없음) 
 			-변수	: 상수가 됨
 			-메소드	: 오버라이딩 불가능 (=> 자식클래스에서 해당 메소드를 재정의 할 수 없다.)
 			-클래스	: 상속할 수 없음 (=> 부모클래스가 될 수 없음)
 			
 클래스간 타입 변환(p.333)
	자동으로 가능한 경우
  		-자식클래스의 객체를 부모클래스로 변환시키는 경우, 자동으로 가능
 			자식클래스 객체1 = new 자식클래스();
			부모클래스 객체2 = 객체1;			
 	
 	명시적으로 가능한 경우
 		- 부모클래스의 객체를 자식클래스로 변환시키는 경우, 명시적(강제)으로 해야하는데 항상 가능한 건 아님
 		
 			P부모 c자식
 			가능한 예)- 부모객체가 자식클래스로 만들어진 경우, 자식클래스로 변환시키는 경우 가능 
 			P p = new C();			
 			C c= (C)p;		
 			
 			불가능한 예)- 부모객체가 부모 클래스로 만들어진 경우 자식 클래스로 변환시킬 수 없다.
 			P p = new P();
 			C c = (C)p; 
 	
 
 	A instanceof B: A를 B로 타입변환 할 수 있는지를 확인
 					할 수 있으면, 결과 값이 => true
 					할 수 없으면, 결과 값이 => false 
 					
 					
<Summary>
 상속
  - A는 B이다

 멤버변수
 - A는 B를 가지고 있다

	스마트폰은 카메라이다(X) => 카메라를 스마트폰에 상속할 수가 없다.
	스마트폰은 카메라를 가지고 있다(O) => 카메라는 스마트폰의 멤버변수 될 수 있다.
	가계부는 내역이다(X)
	가계부는 내역들을 가지고 있다(O) => 멤버변수 / "has a 관계"라고 불러야 돼
	
				
 ** Day13: 필드/매개변수의 다형성, 오버라이딩/오버로딩의 차이 를 꼭 알 것!