공부한 것 꼭꼭 씹어먹기

JAVA 클래스 상속과 인계 본문

소소한 개발 지식

JAVA 클래스 상속과 인계

젤라솜 2022. 10. 5. 16:51
반응형

 

JAVA의 클래스 상속에 대해 정리해 보겠습니다. 

상속을 사용하면 다른 클래스를 일정한 그룹으로 취급할 수 있게 됩니다. 차량을 예로 들자면 택시나 버스, 여객선 등 다양한 차량이 있습니다. 이것들은 각각 다른 클래스라고 생각할 수 있습니다만, 크게 탈 것이라고 하는 하나의 카테고리로 분류할 수 있군요. 그러면 같은 성질이나 동작을 가지고 있다고 말할 수 있습니다. 그 놀이기구를 같은 그룹으로 취급할 수 있는 것이 계승입니다. 상속은 매우 성공적인 메커니즘입니다. 단, 초보자에게는 조금 직관적으로 알기 어려운 곳이 있습니다. 수속 지향의 프로그램에서는 소스 코드를 대충 읽으면 어떤 처리를 하고 있는지가 일목요연입니다만, 객체 지향에서는 자신의 클래스가 가지고 있지 않을 것인 멤버를 사용할 수 있거나 하는 것이 한눈에 들어오지 않을 수 있습니다. 자바의 System 클래스에는 Object 클래스라고 하는 슈퍼 클래스가 있습니다. 그리고 슈퍼 클래스가 가지고 있는 멤버(필드나 메소드)는 서브 클래스가 사용할 수 있습니다. 그러나 그 반대는 없습니다. 인간도 조상으로부터 유전 정보를 받고 있네요. 당신의 특징이나 스킬에도 스스로 획득한 것과, 조상으로부터 전해지고 있는 것이 있을까 생각합니다. 선조로부터 전해지고 있는 것을 사용할 수 있는 것이 계승의 구조입니다.

 

부모(선조)가 가지고 있는 것을 아이는 사용할 수 있다.

자식(자손)이 가지고 있는 것을 부모는 사용할 수 없다.

 

슈퍼 클래스는 부모 클래스라고도 하고 서브 클래스는 자식 클래스라고 할 수 있습니다. Object 클래스는 이름대로 "사물"을 나타내는 클래스입니다. Object 클래스는 Java의 모든 클래스의 슈퍼 클래스입니다. Object 클래스 에는 예를 들어 equals 메소드가 정의되어 있으므로 표준 API에서 확인하십시오. 따라서 모든 클래스에서 equals 메소드를 사용할 수 있습니다. 다만, 오버라이드(override)라고 하는 구조에 의해 같은 이름의 메소드이어도 슈퍼 클래스의 처리 내용과 서브 클래스의 처리의 내용이 다른 경우가 있습니다.

 

 

상속이란, 이미 있는 클래스의 필드나 메소드를 새로운 클래스가 인계하는 것을 말합니다. 

영어로는 "inheritance"로 "계속과 상속"이라는 의미가 있습니다. 상속을 사용하여 기능을 확장할 수 있기 때문에 확장이라고도 합니다. 확장은 영어로 " extends "입니다. 여러분은 머리카락의 연장 을 알고 있습니까? 그것이 extends의 이미지입니다. 이 계승의 구조는 여러분도 이용하는 것이 가능합니다. 다만, 무엇이든 간에 클래스간에 상속 관계를 만들어 필드나 메소드를 받아들일 수 있을까라고 하면 그것은 다릅니다. 거기에는 논리적 필연성이 필요합니다. 그렇지 않으면 체계가 혼란스러워지겠지요.

 

A car is a Vehicle.
An airplane is a Vehicle.
A ship is a Vehicle.

 

자식 클래스는 부모 클래스의 일종이라고 생각하면 됩니다. 슈퍼 클래스에는 공통의 메소드를 정의해, 서브 클래스에 그것을 확장할 수 있도록 합니다. 차량 클래스에 공통적인 메소드의 예로서,

  • 앞으로
  • 멈추다
  • 사람을 태우다

등을 생각할 수 있습니다. 서브 클래스들을 슈퍼 클래스의 참조로 취급하는 것으로 복수의 클래스를 동료로서 취급할 수 있습니다. Java에서 모든 클래스의 수퍼 클래스에는 Object 클래스가 있습니다. 즉, 모든 클래스에는 Object 클래스의 메소드가 있다는 것입니다. 쓰지 않았지만 사용할 수 있습니다. 그것이 상속(확장)의 구조였습니다. 차량(차량) 클래스와 Car 클래스가 있고, 부모와 자식 관계가 있습니다. 자동차는 일종의 차량이라고 할 수 있습니까? 말할 수 있습니다. 그렇다면 차를 향해 "놀이기구야! 움직여라!"라고 할 수 있을까요? 논리적으로 잘못된 곳은 없네요. 그런 일을하는 것이 위 코드의 메인 메소드입니다.즉,서브 클래스를 슈퍼 클래스의 참조로 취급할 수 있다 그렇게 됩니다. 서브 클래스를 슈퍼 클래스의 참조로 취급하는 것으로 복수의 클래스를 동료로서 취급한 것입니다. 슈퍼 클래스형의 변수로 서브 클래스를 취급할 때, 서브 클래스 독자적인 메소드를 그대로는 호출할 수 없습니다. 그러나 실태는 비행기입니다. 그러므로, 일단은 차량형의 변수에 묶은 비행기도, 날리는 것은 가능합니다. 프리미티브형에서도 본 캐스트를 사용합니다. (보다 엄격하게는 인스턴스를 캐스팅하는 대신 참조를 캐스팅하고 있습니다 )

반응형
Comments