자바/그림으로 배우는 JAVA

[Lesson 11] 새로운 클래스

hooooolly 2024. 7. 8. 15:48

상속

새로 확장된 클래스가 기존 클래스의 멤버를 물려받는 것을 가리켜 상속이라고 한다. 여기서 기존 클래스란 이미 설계가 끝난 바탕이 되는 클래스 (슈퍼 클래스)를 말한다. 이 기존 클래스를 물려받으면서 코드를 확장해서 만드는 새로운 클래스를 서브 클래스라고 한다. 서브 클래스는 슈퍼 클래스의 멤버를 상속받고 슈퍼 클래스의 멤버를 동일하게 호출 가능하다. super()를 사용해서 슈퍼 클래스의 생성자 중 인수의 형과 개수가 일치하는 생성자를 골라 호출할 수 있다. 

 

this() : 그 클래스의 다른 생성자를 호출

super() : 그 클래스의 슈퍼 클래스 생성자를 호출

 

두 메소드는 모두 생성자의 가장 윗부분에 위치해야 하므로 동시에 사용할 수 없다.

 

오버라이딩

서브 클래스의 메소드로 슈퍼 클래스의 메서드를 대신하는 기능을 오버라이딩(overriding)이라고 한다. 슈퍼 클래스의 메소드메서드 이름과 인수의 개수 및 형이 완전히 같은 메서드를 서브 클래스에서 정의하면 서브 클래스에서 새롭게 정의한 메서드가 호출된다.

 

서브 클래스 객체가 슈퍼 클래스의 객체이기도 하기 때문에 서브 클래스 객체를 슈퍼 클래스의 변수로 다룰 수 있다.

Car car1 = new RacingCar();

 

이때 서브 클래스에서 오버라이딩한 메서드를 슈퍼 클래스 변수를 통해 호출하면 서브 클래스의 메소드가 호출된다. 하지만 서브 클래스 고유의 메소드를 호출할 수 없다. 오버라이딩 기능을 통해 하나의 메서드 이름으로 각각의 객체가 지니는 기능을 적절하게 실행할 수 있다.

 

슈퍼 클래스의 메소드 이름 앞에 final을 붙여 오버라이딩이 되지 않도록 제한할 수 있다. final을 클래스 이름 앞에 붙이면 서브 클래스를 만들 수 없다. final이 필드 앞에 붙었을 경우 필드의 값을 변경할 수 없고, 이 필드는 선언 시 초기화가 필수이다. 

 

Object 클래스

슈퍼 클래스를 별도로 지정하지 않은 클래스는 Object 클래스를 상속받는다. Object 클래스를 상속받기 때문에 해당 클래스의 메서드를 작성하지 않아도 Object 클래스에 선언된 메서드를 호출할 수 있다.