개발/Java

JAVA_10_상속

onivv 2024. 7. 16. 13:54
반응형

#1 상속

▶ 상속이란?

  • 부모 클래스가 자식 클래스에게 클래스 멤버를 물려주는 것
  • 클래스를 재사용하기 때문에 중복을 줄여주고 수정을 최소화함

▶ 자식 클래스 선언

  • extends 키워드를 사용해 상속받을 클래스를 지명
  • 자식 클래스는 부모 클래스의 모든 멤버를 그대로 사용 가능
// 상위 클래스
class A {

}

// 하위 클래스
class B extends A {

}

#2 상속에서의 생성자 : super()

  • this() 메서드가 같은 클래스의 다른 생성자를 호출할 때 사용된다면,
  • super() 메서드는 자식 클래스에서 부모 클래스의 생성자를 호출할 때 사용
  • 필요에 따라 매개변수를 전달할 수 있음
  • 개발자가 직접 생성자를 선언할 때는 자식 클래스에서 반드시 부모 클래스의 생성자를 호출해야 함
public class A {
	String name;
	int age;
    
	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

public class B extends A {
	int memberID;
    
	B(String name, int age, int memberID){
		super(name, age);		// super()를 통해 부모 생성자에 매개변수 전달
						// 부모 객체 생성
		this.memberID = memberID;			
}
  • B 클래스로 객체를 만들기 위해서는, A 객체부터 생성해야 함
  • A 생성자는 name, age를 매개변수로 받아서 객체를 생성
  • B 생성자에서 A 생성자를 호출할 때, 매개변수로 받은 name, age 값을 전달해 부모 객체를 먼저 생성
  • B 객체에 필요한 memberID를 추가해 B 객체를 완성

 

#3 오버라이딩(overriding)

  • 자식 클래스가 상속받은 메서드의 내용을 재정의해서 사용
  • 상속받은 메서드를 변경해서 다시 구현하는 것
  • 부모 클래스의 메서드보다 접근 제한 범위를 넓힐 수 있지만, 접근 제한 범위를 좁힐 수는 없음
  • @Override 애노테이션
  • 오버로딩(overloading) vs 오버라이딩(overriding)
    • 오버로딩 : 새로운 메서드를 정의
    • 오버라이딩 : 상속받은 기존의 메서드를 재정의
  • super 키워드
    • 부모 클래스에서 상속받은 필드나 메서드를 자식 클래스에서 참조하는데 사용하는 참조 변수
    • super.부모메서드();
    • this와 마찬가지로 super 참조 변수를 사용할 수 있는 대상도 인스턴스 메서드뿐, 클래스 메서드에서느느 사용 불가

#4 접근 제한자

  1. public : 모든 패키지, 모든 클래스에서 접근 가능
    • public 클래스/생성자 : 모든 패키지, 모든 클래스에서 해당 클래스로 객체 생성 가능
    • public 멤버(필드,생성자,메서드) : 모든 패키지, 모든 클래스에서 객체를 통해 접근 가능
  2. protected : 같은 패키지 안에서 접근 가능 / 다른 패키지라면 자식 클래스만 접근 가능
    • protected 생성자 : 같은 패키지의 클래스에서 생성자를 호출해 객체 생성 가능, 다른 패키지면 해당 클래스의 자식 클래스라면 생성자를 호출해 객체 생성 가능
    • protected 필드/메서드 : 같은 패키지의 클래스에서 접근 및 사용 가능, 해당 클래스의 자식 클래스라면 다른 패키지에서 사용 가능
  3. default : 같은 패키지 내에서만 접근 가능
    • 접근 제한자를 별도로 명시하지 않았다면 클래스와 멤버들은 자동으로 default (생략)
    • default 클래스/생성자 : 같은 패키지 내에서 호출, 객체 생성 가능
    • dafault 필드/메서드 : 같은 패키지 내에서 접근 및 사용 가능
  4. private : 클래스 외부에서 접근 불가능
    • private 생성자 : 클래스 외부에서 객체를 생성할 수 없음, 클래스 내부에서만 생성자를 호출해 객체 생성 가능
    • private 필드/메서드 : 클래스 외부에서 접근 불가, 클래스 내부에서만 사용 가능
  • 클래스는 접근 제한자로 public, default만 가능
  • private, protected는 클래스 멤버들을 위한 접근 제한자로 클래스 외부에서 접근을 막을지 말지에 대한 접근을 제한하는 용도로 사용되기 때문에 클래스의 접근 제한자로 사용 불가

 

#5 final 키워드

  • 상수를 뜻하는 키워드, 필드 앞에 선언하여 사용
  • 초기화 이후 값을 바꿀 수 없으며 시간이 지나도 처음 정의된 상태가 변하지 않음
  1. final 클래스 : 상속의 마지막 클래스
  2. final 메서드 : 메서드는 상속받더라도, 오버라이딩할 수 없는 메서드

 

반응형

'개발 > Java' 카테고리의 다른 글

JAVA_12_추상 클래스 & 인터페이스  (1) 2024.07.16
JAVA_11_다형성 & 타입 변환  (1) 2024.07.16
JAVA_09_생성자  (0) 2024.07.15
JAVA_08_메서드  (0) 2024.07.15
JAVA_07_클래스  (0) 2024.07.15