평행코드

상속이란? 그리고 super 본문

Java

상속이란? 그리고 super

나의 오류는 누군가 겪었던 오류 2023. 9. 12. 08:54
상속

다른 클래스가 가지고 있는 멤버(필드, 메소드) 들을 새로 작성할 클래스에서 직접 만들지 않고,

상속을 받음으로써 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능

 

상속의 장점

보다 적은 양의 코드로 새로운 클래스 작성 가능

코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경이 용이

코드의 중복을 제거하여 프로그램의 생산성/ 유지보수에 크게 기여

 

상속의 특징

1. 모든 클래스는 Object클래스의 후손

Object클래스가 제공하는 메소드를 오버라이딩하여 메소드 재구현 가능
ex) java.lang.String 클래스의 equals()와 toString(), hashCode()...

 

2. 부모클래스의 생성자, 초기화 블록은 상속 안 됨
자식 클래스 생성 시, 부모 클래스 생성자가 먼저 실행
자식 클래스 생성자 안에 부모 클래스 생성자를 호출하고 싶으면 super() 활용

 

3. 부모의 private멤버는 상속은 되지만 직접 접근 불가
자식 객체 생성 시에 부모의 필드 값도 전달 받은 경우,
자식 생성자 안에서 부모의 private 필드에 직접 접근하여 대입 불가
super() 이용하여 전달받은 부모 필드 값을 부모 생성자 쪽으로 넘겨 생성하거나
setter, getter 메소드를 이용하여 접근

 

상속의 방법

클래스 간의 상속 시 extends를 사용한다

[접근제한자] class 클래스명 extends 클래스명 {}
public class Student extends School {}
단일 상속과 다중 상속

클래스간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성
(c++에서는 가능하지만) 자바에서는 다중 상속 미지원 → 단일상속만 지원

 

super()와 super.

super()

부모 생성자를 호출하는 메소드로, 기본적으로 후손 생성자에 부모생성자가 포함되어 있다.

부모 생성자를 호출하는 super()가 생성자 안에는 첫 줄에 존재한다

(부모 생성자가 가장 먼저 실행되어야 하기 때문에 명시적으로 작성 시에도 반드시 첫 줄에만 작성해준다.)

 

super.

상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를
가리키는 참조변수로 자식 클래스 내에서 부모 클래스 객체에
접근하여 필드나 메소드 호출 시 사용

 

super의 예시

public class Animal {
	private String type;
	private String name;
	private int age;
	
	public Animal() {}

	public Animal(String type, String name, int age) {
		super();
		this.type = type;
		this.name = name;
		this.age = age;
	}

	// ... getter setter부분
	
	public String info() {
		return type + " " + name + " " + age + " ";
	}
}

// 결과) 먼치킨 치킨 1

public class Cat extends Animal{
	
	public String info() {
		return "고양이 " + super.info();
	}

}

// 결과) 고양이 먼치킨 치킨 1

 

'Java' 카테고리의 다른 글

다형성 추상클래스와 인터페이스  (0) 2023.09.17
오버라이딩과 오버로딩  (0) 2023.09.13
객체배열  (0) 2023.09.11
생성자(Constructor)  (0) 2023.09.07
메소드 Getter와 Setter  (0) 2023.09.07