반응형
250x250
Notice
Recent Posts
Recent Comments
Link
이롭게 현명하게
[JAVA] 자바 클래스 상속 본문
728x90
반응형
목차
부모 생성자 호출
메소드 재정의
final 클래스와 final 메소드
<정리>
class 자식클래스 extends 부모클래스{
}
다중 상속이 불가능하다.
[부모 생성자 호출]
extends 뒤에 부모 클래스를 기술한다.
이때 여러 개의 부모 클래스를 상속할 수 없다.
그러므로 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.
class 자식클래스 extends 부모클래스{
}
<부모 생성자 호출>
- 상속 관계에서의 생성자 : 슈퍼 클래스와 서브 클래스 각각 각 여러 생성자 작성 가능
- 서브 클래스 생성자 작성 원칙 : 서브 클래스 생성자에서 슈퍼 클래스 생성자 하나 선택
- 서브 클래스에서 슈퍼 클래스의 생성자를 선택하지 않는 경우 : 컴파일러가 자동으로 슈퍼 클래스의 기본 생성자 선택
- 서브 클래스에서 슈퍼 클래스의 생성자를 선택하는 방법 : 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 메소드는 자식 클래스에서 재정의 할 수 없다.
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
더보기
[ 참고자료 ]
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