이롭게 현명하게

[JAVA] 자바 클래스 상속 본문

JAVA

[JAVA] 자바 클래스 상속

dev_y.h 2023. 4. 27. 18:42
728x90
반응형


 

목차

 

부모 생성자 호출

메소드 재정의

final 클래스와 final 메소드

 


<정리>

class 자식클래스 extends 부모클래스{

}

다중 상속이 불가능하다.


[부모 생성자 호출]

extends 뒤에 부모 클래스를 기술한다.

이때 여러 개의 부모 클래스를 상속할 수 없다.

그러므로 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.

class 자식클래스 extends 부모클래스{

}

 

 

 

 

<부모 생성자 호출>

  1. 상속 관계에서의 생성자 : 슈퍼 클래스와 서브 클래스 각각 각 여러 생성자 작성  가능
  2. 서브 클래스 생성자 작성 원칙 : 서브 클래스 생성자에서 슈퍼 클래스 생성자 하나 선택
  3. 서브 클래스에서 슈퍼 클래스의 생성자를 선택하지 않는 경우 : 컴파일러가 자동으로 슈퍼 클래스의 기본 생성자 선택
  4. 서브 클래스에서 슈퍼 클래스의 생성자를 선택하는 방법 : super() 사용

 

super()

  • 서브 클래스에서 명시적으로 슈퍼 클래스의 생성자 선택 호출
  • super(parameter);
  • 인자를 이용하여 슈퍼 클래스(부모 클래스)의 적당한 생성자 호출
  • 반드시 서브 클래스 생성자 코드의 제일 첫 라인에 와야 한다.
// A.java


public class A {
	public A() {
		System.out.println("생성자 A");
	}
	public A(int a) {
		System.out.println("매개 변수 생성자 a 값 : "+a);
	}
}
// B.java


public class B extends A{
	public B() {
		System.out.println("생성자 B");
	}
	public B(int b){
		super(b);
		System.out.println("매개 변수 생성자 b 값 : "+b);
	}
}
// Main.java


public class Main {

	public static void main(String[] args) {
		B b = new B(3);
	}

}

[메소드 재정의]

메소드 오버라이딩(Method Overriding) : 슈퍼 클래스(부모 클래스)의 메소드 서브 클래스에서 재정의

메소드가 오버라이딩되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다.

  • 슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것이 동일하게 작성
  • final 메소드 : 자식 클래스가 재정의 못하도록 부모 클래스의 메소드를 final로 작성할 수 있다.
// A.java


public class A {
	
	public A() {
		System.out.println("생성자 A");
	}
	public A(int a) {
		System.out.println("매개 변수 생성자 a 값 : "+a);
	}
	public void Print() {
		System.out.println("class A");
	}
}
// B.java


public class B extends A{
	public B() {
		System.out.println("생성자 B");
	}
	public B(int b){
		super(b);
		System.out.println("매개 변수 생성자 b 값 : "+b);
	}
	@Override
	public void Print() {
		super.Print();
		System.out.println("class B");
	}
}
// Main.java

public class Main {

	public static void main(String[] args) {
		B b = new B(3);
		b.Print();
	}

}
// < 실행결과 >
/*
매개 변수 생성자 a 값 : 3
매개 변수 생성자 b 값 : 3
class A
class B
*/

 

<오버라이딩의 목적>

  • 부모 클래스(슈퍼 클래스)에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능
  • 상속을 통해 '같은 이름에 서로 다른 내용 구현' 이라는 객체지향의 다형성 실현
  메소드 오버로딩 메소드 오버라이딩
선언 같은 클래스나 상속 관계에서 동일한 이름의 메소드 중복 작성 서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드 재작성
관계 동일한 클래스 내 혹은 상속 관계 상속 관계
목적 이름이 같은 여러 개의 메소드를중복 작성하여 사용의 편리성 향상, 다형성 실현 부모 클래스에 구현된메소드를무시하고 서브  클래스에서 새로운 기능의 메소드를재정의 하고자함.
다형성 실현
조건 메소드 이름은 반드시 동일하고 ,매개변수 타입이나 개수가 달라야 성립 메소드의 이름, 매개변수 타입과 개수, 리턴 타입이 모두 동일하여야 성립
바인딩 정적 바인딩, 호출될 메소드는 컴파일 시에 결정 동적 바인딩, 실행 시간에 오버라이딩된 메소드 찾아 호출

[final 클래스와 final 메소드]

final 키워드는 해당 선언이 최종 상태이고, 결코 수정될 수 없음을 뜻한다.

 

클래스를 선언할 때 final 키워드를 class 앞에 붙이게 되면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다.

즉 final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다.

 

메소드를 선언할 때 final 키워드를 붙이게 되면 이 메소드는 최종적인 메소드이므로 오버라이딩할 수 없는 메소드가 된다.

즉 부모 클래스를 상속해서 자식 클래스를 선언할 때 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의 할 수 없다.

 

 

[JAVA] 자바 타입 변환

목차 자동 타입 변환 하나의 배열로 객체 관리 매개 변수의 다형성 강제 타입 변환 객체 타입 확인 업/다운캐스팅 [자동 타입 변환] 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용할

devyihyun.tistory.com


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

 

더보기

[ 참고자료 ]

 

 

 

 

728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 자바 추상 클래스와 추상 메소드  (0) 2023.05.01
[JAVA] 자바 타입 변환  (0) 2023.04.28
[JAVA] 자바 상속 개념  (0) 2023.04.26
[JAVA] 자바 접근 제한자  (0) 2023.04.25
[JAVA] 자바 패키지  (0) 2023.04.24
Comments