본문 바로가기
Java | spring/자바 객체지향

상속과 다형성, 오버라이딩?! 오버로딩?!

by 워니 wony 2019. 5. 7.

상속

 

B클래스가 A클래스를 상속 받으면 B클래스는 A클래스의 멤버 변수와 메서드를 사용할 있다.

 

객체지향 프로그램은 유지, 보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 기반이 되는 기술이 바로 상속이다.

 

 

클래스의 상속

  • 상속하는 클래스 : 부모클래스, 상위클래스, 슈퍼클래스
  • 상속받는 클래스 : 자식클래스, 하위클래스, 서브클래스

 

클래스 상속 문법

상속을 구현하는 경우 extends 예약어를 사용

 

B A 상속받는다.

class B extends A{  }

 

 

protected 예약어

상위 클래스의 변수나 메서드 외부 클래스에서는 사용할 없지만, 하위 클래스에서는 사용할 있도록 지정하는 예약어가 protected

 

 

 

상속에서 클래스 생성과 형변환

상위클래스를 상속 받은 하위클래스가 생성 반드시 상위 클래스의 생성자가 먼저 호출된다.

 

상위 클래스를 부르는 예약어, super

super 예약어는 하위클래스에서 상위클래스로 접근할 사용한다. 하위클래스는 상위클래스의 주소, 참조값을 알고 있고, 참조값을 가지고 있는 예약어가 super

  • super 예약어로 매개변수가 있는 생성자 호출하기
  • 상위클래스의 멤버변수나 메서드를 참조하는 super : super.변수명(메서드명)

 

상위 클래스로 묵시적 클래스형 변환

상속 받은 하위클래스는 상위클래스를 상속 받은 것이기 때문에 상위클래스로 변환이 가능하다.

 

메서드 오버라이딩

  • 상위클래스에 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우에 하위클래스에서 메서드를 재정의할 있다.
  • 오버라이딩을 하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다. 그렇지 않으면 컴파일러는 다른 메서드로 인식한다.

가상메서드

  • 상위 클래스와 하위 클래스에 같은 이름의 메서드가 존재할 호출되는 메서드는 인스턴스에 따라 결정된다. 이렇게 인스턴스의 메서드가 호출되는 기술을 '가상메서드(virtual method)'라고 한다.
  • 일반적으로 프로그램에서 메서드를 호출한다는 것은 메서드의 명령 집합이 있는 메모리 위치를 참조하여 명령을 실행하는 , 인스턴스가 달라도 동일한 메서드가 실행된다.
  • 가상메서드 : 자료형에 의해 메소드가 실행되는 것이 아니라, 생성된 인스턴스에 의해서 메서드가 실행된다. 이를 가상메서드라고 한다. 자바의 모든 메서드는 가상 메서드

 

* 다중상속 NO!

자바는 다중상속을 지원하지 않는다. 모호성 때문에, C++ 지원한다.

 

 

다형성 오버로딩

 

다형성의 정의와 장점

  • 다형성이란 하나의 코드가 여러 자료형으로 구현되어 실행되는 것을 말한다.
  • 상속 받은 모든 클래스를 하나의 상위클래스로 처리를 있고, 별도의 소스코드를 모드 쓰지 않고, 상속 재정의 하면서 추가하면 되기 때문에 프로그램을 쉽게 확장할 있다. 다형성을 활용하면 유연하고 구조화된 코드를 구현하여 확장성 있고 유지보수하기 좋은 프로그램을 개발 있다.

is-a 관계와 has-a 관계

  • is-A 관계 : 상속관계, 하위클래스가 상위클래스에 종속
  • Has-A 관계 : 클래스가 다른 클래스를 소유한 관계

 

 

다운 캐스팅과 instanceof

  • 다운캐스팅 : 상위클래스로 변환되었던 하위 클래스를 다시 원래 자료형으로 변환하는
  • instanceof : 왼쪽 변수의 원래 인스턴스형이 오른쪽 x래스 자료형인지 확인, 하위클래스로 변환을 명시 해야 한다. (하위클래스명)변수명
반응형

댓글