Back-end/JAVA,Spring

클래스 간의 관계.상속 inheritance/ 포함

cheersHena 2018. 6. 4. 14:54
반응형

상속 inheritance (확장) , 포함
the relationship between class.
e.g
자동차 - 엔진 :포함 
필통 - 펜:포함 
사람-휴대폰 : 포함 
지갑 - 지폐: 포함 
사람 - 포유류 : 확장

*자바의 단점: 다중 상속 불가. 계층상속만 가능. 
e.g) 
각 클래스 human, parent, child 
parent는 human포함.
child는 parent와 human 모두 포함.
child 객체 생성하게 되면 child와 상속(확장)관계에 있는 객체의 생성자부터 호출.
child에 있는 기능(메서드)호출시 child부터 찾고 없으면 상속관계있는 객체를 탐색.
탐색했는데도 없으면 에러. 

고객 , 계좌 : 고객이 계좌를 가진다.
은행, 고객, 계좌: 은행이 고객을 가진다.
명제 1. 은행은 고객의 계좌를 가진다 (성립 ) 

객체간의 관계가 서로 포함 관계일때 어떤 방법을 이용해서 표현해야하는가...
-포함한다 = 객체를 가진다.(객체생성안하면 사용 할 수 없다.)
-관계에 의해서
  다른 객체에서 생성한 객체를 대입해야 할 수 있다. 
  (은행에서 발급한 계좌를 고객의 계좌에 대입) 

즉, 객체간의 관계. :상속(확장) . 포함.
1.상속(확장) A is B
: A는 B다. -> A extends B : 사람은 동물이다 -> 사람 extends 동물.
B를 객체 생성하지 않아도 됨. A생성하게되면 B도 생성한다. (컴파일러가 )
상위클래스에 있는 멤버 (변수, 메서드)를 하위클래스가 사용할 수 있다. 
상위클래스 지칭 변수: super.

2. 포함 A has B
:A는 B를 가진다 ->  A 클래스에 B타입의 변수가 있다. 
자동차는 엔진을 가진다 -> 자동차 클래스에 엔진 타입의 변수가 있다. 
B를 선언만 해서는 안되고 생성new 해야만 사용(접근) 가능.
*생성은 객체간의 관계 고려해야만 한다. 
ex)A객체 생성시 A에서 생성해서 B로 보낸다.. 

은행, 고객 계좌 + 로또
고객이 로또가짐. 
로또 객체 속성: 로또 번호 45, 로또번호 6 
객체 기능은 없다. : 객체 스스로 할 수 있는게 없다. +

오버로딩 vs 오버라이딩
- 오버로딩 : 받을게뭔지모르니 아무거나 던져라. 내가 다만들어놓겠다.
매개변수 2개 이상인 경우: 매개변수 타입 다르거나 갯수가 다르거나
- 오버라이딩: 조상의 메서드의 내용 변경하는것.선언부는 똑같다. /구현부 다를수있다.
* 공통점: 메서드명이 같다. 

접근제어자 access modifier 
public > protected > default > private


반응형