상속, extends, 오버라이딩, 재정의, 타입형변환

2019. 3. 8. 19:19JAVA

---------------------상속-------------------------

======================================================

#. 부모의 속성이나 기능을 제약없이 사용하기위한 상속.

======================================================

상속(extends)이란 

같은 성질은 가지게 되는것, 객체지향 프로그램에서는 

부모클래스의 멤버를 자식클래스에 물려줄수있다.

자식클래스를 만든다면 부모부터 무조건 만들어진다.



예시)

public class Parent{

int x;

void m1(){}

}


-----------------------------

public class child extends Parent {

int y;

void m2();

}

// 차일드에는 y와 m2가있지만 Parent에게 상속되어 

// x와 m1()도 사용 가능하다.




상속(extends) 사용목적


1. 부모의 속성이나 기능을 제약없이 사용하기위해.

2. 부모의 클래스처럼 되기위해.





상속관계(is a 관계)

A is a B    --->  iphone is a phone

  Android is a phone


포함관계(has a 관계)

A has a B    ---> Car has a engine

  



상속(extends) 제한


1. 자바는 단일상속만 가능하다.

2. 부모의 생성자는 상속되지않는다.

3. private는 상속되지않는다.



=================================================================================================






---------------------------오버라이딩-----------------------


==============================================================

다형성을 위한 상속 메소드 오버라이딩을 편하게 사용하기위한것.

==============================================================


오버로딩(중복정의)



오버라이딩(메소드 재정의)

상속관계에서 나타나며 부모의 메소드를 자식에 맞게 다시 정의되는거을 오버라이딩이라 한다.

재정의를 할경우 다형성이 생겨난다.

우선순위로 본다면 재정의(오버로딩)가 우선순위다. 예를들어 부모메소드와 자식의 재정의 메소드가있다면

자식의 재정의된 메소드가 우선순위이다.

Object는 모든 객체의 조상이다.





매개변수의 다형성

내가 사용하는 객체에 따라 발현에따라 다른것 다만 용도는 서로 같아야한다.


생성 규칙

부모의 메소드와 동일한 타입을 가져와야한다.

부모클래스의 접근제한보다 같거나 느슨해야한다.



----------------타입 형 변환------------------------

객체를 생성해서 참조변수에 대입할 때 

생성한 객체와 참조변수의 타입이 다른경우

생성된 객체의 안쪽방향으로 객체를 탐색해서

참조변수와 통일한 타입의 객체를 찾아서 그 객체의 주소값을 

참조변수에 담는 것


    

    <타입형 변환>

1. Tire t1 = new Tire()

2. NormalTire t2 = new NormalTire()

3. SnowTire t3 = new SnowTire()


4. Tire t4 = new NoremalTire() O 가능

5. Tire t5 = new SnowTire() O 가능

6. SnowTire t6 = new Tire() X 안됨



이렇게 설정만 다 된다면 부모 Tire안에 SnowTire-> 금호 스노우타이어등 재정의로 메소드를넣으면

4번 5번처럼 Tire를 보고 만들면 재정의된 메소드를 부모안에서 편하게 사용 가능함


자식은 부모의 정보를 알지만 부모는 자식의 정보가 없어 자식 -> 부모로 타입변환이 불가




오버라이딩을 제일 마지막에 있는 객체의 것까지만 사용된다.


쓰는 이유 : 확장에는 열려야 하고 변화에는 닫혀있어야한다.(개방 폐쇄원칙)