본문 바로가기

Java/자바 기반 웹 개발자 과정 필기

[200311.13일차] 상속

반응형

 

상속

 

어떤 클래스가 다른 클래스의 멤버변수와 멤버함수를 물려받는 것

상속은 코드를 재사용하기 위한 중요한 기법

=> 이어붙여지는 개념

 

재사용 => 일부를 수정해서 사용할 수 있다.

 

 

* 키워드는 extends

 

 

* 사용해보기

Car 클래스 (부모 클래스)
SportCar 클래스, extends를 사용해 Car클래스를 상속받음 (자식 클래스)
자식 객체를 만들면 부모 객체를 만들고, 거기에 자식 객체를 이어붙인다.
메모리상 sCar은 Stack에 만들어지고, heap에 부모 객체, 자식 객체가 만들어진다. 이렇게 만들어진 두 객체는 같은 주소값을 가진다. sCar는 두개가 합쳐진 전체를 가리키는 주소값을 가진다.

 

 

 

* 메소드 재정의 (메소드 오버라이딩, method Overriding)

메소드의 이름, 반환형, 매개변수의 개수와 데이터 타입이 일치하여야 한다.

==> 다형성을 위해 사용한다.

두 함수는 그냥 서로 다른 메소드이다.

 

 

* 기본생성자는 객체가 만들어질때 사용하고 사라진다.

* 사용자정의생성자는 객체가 만들어질 때 저장된다.

* 오버라이딩을 하면 메인함수에서 자식클래스를 이용해 부모클래스의 오버라이딩한 함수를 부를 방법은 없다.

(필요할때는 그냥 부모클래스를 사용한다.) 

 

 

 

* 접근 지정자

private - class내에서만 사용한다.

protected - 패키지 안에서만 사용한다.

public - 어디서든 사용한다.

 

부모클래스 기본생성자가 먼저 실행되는 것을 알 수 있다.

 

* 이걸 묵시적인 호출이라고 한다.

 

 

사용자 정의 생성자를 사용할 때는 자식클래스의 생성자에 super(매개변수)를 활용한다.

 

 

 

 

 

 

Object의 메소드

Object는 모든 자바 객체의 조상(최상위 클래스, 부모클래스)이다.

 

 

부모가 하나를 만들어두면, 자식들이 가져다가 쓸 수 있다

=> 코드를 재사용한다.

 

 

 

 

 

 

인터페이스와 다형성

 

다형성

type이 여러개다. 다양하다.

=> 여러개의 타입을 하나의 코드로 처리

( 어떤 타입의 데이터가 들어와도 대응이 가능하게 만드는 것 )

 

 

 

 

자식 클래스의 객체 내부에는 부모클래스로 만든 객체가 포함되어있기 때문에

부모클래스의 참조변수로 자식클래스의 객체를 참조할 수 있다.

=>

Rectangle r= new Rectangle();

Shape s = new Rectangle();

 

 

 

객체지향에서의 다형성

 

전제 : 부모클래스의 참조변수로 자식클래스의 객체를 참조할 수 있다.

(자식클래스의 객체에는 부모클래스로 만든 객체를 포함하기 때문에)

 

- 부모클래스의 참조변수로 자식클래스의 객체를 참조했을 때

부모클래스에 존재하는 멤버에만 접근이 가능함

 

-부모클래스의 참조변수로 자식 클래스의 객체를 참조해서

부모 클래스에 존재하는 멤버함수 호출 시

자식클래스에서 해당 메소드를 오버라이딩 했다면

실제 호출되는 함수는...

자식에서 오버라이딩 한 메소드가 호출됨 (*동적바인딩)

 

 

* 부모는 부모가 자식에게 줘 자식의 것이 된 것들은 쓸 수 있지만,

자식의 고유의 것들은 사용할 수 없다.

 

 

 

 

* 동적 바인딩

 

 

 

 

 

 

 

 

반응형