상속

LeeSeungHwan dev·2020년 12월 23일
0

목표
자바의 상속에 대해 학습하세요.

학습할 것 (필수)
자바 상속의 특징
super 키워드
메소드 오버라이딩
다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
추상 클래스
final 키워드
Object 클래스

1.자바 상속의 특징
자바에서 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성 하는것이다.
상속을 통해서 클래스를 작성하면 적은양의 코드로 새로운 클래스를 작성 할수 있고
코드를 공통으로 관리 할수 있어서 코드의 추가 및 변경이 매우 용이하다.
*자바의 상속 구현 방법
클래스의 이름뒤에 상속받고자 하는 클래스의 이름을 키워드'extend'와 함께 써주면된다.
ex)class child extends Parent{
//
}

두 클래스가 상속 관계라고 했을때 상속해주는 Parent 클래스는 '조상클래스'라 하고
상속받는 child는 '자손클래스'라고 한다.

*조상 클래스 :부모(parent)클래스 ,상위(super)클래스,기반(base)클래스
자손 클래스 :자식(child)클래스, 하위(sub)클래스,파생된(derived)클래스

*생성자와 초기화 블럭은 상속되지않는다.멤버만 상속된다.
자손클래스의 멤버개수는 조상클래스보다 항상 같거나 많다.

-단일 상속
다른 객체지향 언어인 c++에서는 여러 조상 클래스로부터 상속받는것이 가능한 '다중상속'을 허용하지만 자바는 단일상속만 허용한다.
하나 이상의 클래스로부터 상속을 받을수 없다.
2.super키워드
super는 자손클래스에서 조상클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다.
멤버변수와 지역변수의 이름이 같을때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을때 super를 붙여서 구별할수 있다.
조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고서는 this와 super은 같다.
모든 인스턴스메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데 이것이 참조변수인 this 와 super의 값이된다.

3.메소드 오버라이딩
오버라이딩이란 조상클래스로부터 상속받은 메소드의 내용을 변경하는것을 말한다.
상속받은 메소드를 그대로 사용하기도 하지만, 자손 클래스 자신에게 맞게 변경해야하는 경우
이럴때 조상의 메소드를 오버라이딩한다.

-오버라이딩의 조건
자손 클래스에서 오버라이딩 하는 메소드는 조상 클래스의 메소드와 1.이름이 같아야 하고
2.매개변수가 같아야한다. 3.반환타입이 같아야 한다.
*접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할수있다.
-접근제어자는 조상 클래스의 메소드보다 좁은 범위로 변경할수 없다.
만약 조상클래스에서 정의된 메소드의 접근 제어자가 protected라면 이를 오버라이딩 하는 자손 클래스의 메소드는 접근제어자가 public이나 protercted여야한다.
접근제어자의 접근 범위를 넓은것에서 좁은것 순으로 나열하면 public,protected.(default),private 이다.
-조상클래스의 메소드보다 많은수의 예외를 선언할수 없다.
-인스턴스 메소드를 static메소드 또는 그반대로 변경 할수 없다.

4.다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
동적 메소드 디스패치는 재정의 된 메소드에 대한 호출이 컴파일 타임이 아닌 런타임에 해석되는 프로세스이다.
오버라이드된 메소드가 참조에 의해 호출될때 java는 참조하는 객체 유형에 따라 실행 할 메소드 버전을 판별한다.
어떤 메소드를 호출할지 결정하여 실제로 실행시키는 과정을 말한다.

5.추상 클래스
-추상 클래스란 하나 이상의 추상 메소드를 포함하는 클래스이다.
추상 메소드는 선언만 있고 본체는 없는 함수이며 선언부에 abstract라는 키워드를 붙여 사용한다.
또한 추상 클래스는 추상 메소드를 포함하고 객체화 할수 없다는 점만 제외하면 일반 클래스와 다르지 않으며 생성자,멤버변수와 일반 메소드도 가질수 있다.
추상 클래스 자체로는 클래스의 역활을 하지 못하며 객체를 생성할수 없지만,새로운 클래스를 작성하는데 있어서 부모 클래스로써의 중요한 역할을 갖는다.

6.final 키워드
자바에서 final은 '마지막의'또는 '변경될수 없는'의 의미를 가지고 있으며, 거의 모든 대상에 사용이 가능하다.
변수에 사용되면 값을 변경할수 없는 상수가 되며, 메소드에 사용되면 오버라이딩은 할수 없게되고 클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못하게 된다.
*final이 사용될수 있는곳 - 클래스,메서드,멤버변수,지역변수
클래스-변경 될수 없는 클래스,확장 될수 없는 클래스가 된다.
그래서final로 지정된 클래스는 다른 클래스의 조상이 될수 없다.
메서드-변경될수 없는 메소드,final로 지정된 메소드는 오버라이딩을 통해 재정의 될수없다.
멤버변수,지역변수-변수 앞에 final이 붙으면 값을 변경할수 없는 상수가 된다.
-생성자를 이용한 final멤버 변수의 초기화
final이 붙은 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스 변수의 경우 생성자에서 초기화 되도록 할수있다.
클래스 내에 매개변수를 갖는 생성자를 선언하여 인스턴스를 생성할때 final이 붙은 멤버 변수를 초기화하는데 필요한 값을 생성자의 매개변수로 부터 제공받는다.
이 기능을 활용하면 각 인스턴스마다 final 이 붙는 멤버변수 가 다른 값을 갖도록 하는 것이 가능하다.

7.Object 클래스
Object클래스는 모든 클래스의 상속 계층도의 최상위에 있는 조상클래스이다.
다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 함으로써 가능하게 한다.

-Object 클래스 상속방법
ex) class mate {
//
}
class mate extneds Object{
//
}

출처
자바의 정석
https://studymake.tistory.com/423
https://riptutorial.com/ko/java/topic/9204/%EB%8B%A4%EC%9D%B4%EB%82%B4%EB%AF%B9-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%94%94%EC%8A%A4%ED%8C%A8%EC%B9%98

profile
생각하는 개발자가 되자!

0개의 댓글