42_JAVA Study 04 - 상속
상속(Inheritance)
일반적인 상속의 개념처럼 부모 → 자식 에게 받는 것이 아닌 자식 → 부모를 선택해 상속 받는다.
상속받은 클래스 = 자식 클래스, 하위 클래스, 서브 클래스 라고 부른다
상속해 준 클래스 = 부모 클래스, 상위 클래스, 슈퍼 클래스
상속의 대상
자식 클래스가 상속을 받게 되면 부모 클래스의 필드와 메소드를 받는다.
단, private
를 갖는 필드나 메소드는 상속이 불가하고, 패키지가 다른 경우 default
인 경우에도 상속이 불가
상속의 방법(선언)
상속받을 자식 클래스 뒤에 extends
키워드를 사용하고 부모 클래스를 적으면 된다
class /*자식 클래스*/ extends /*부모 클래스*/{
..
}
자바에서는 자식 클래스가 여러 부모로부터 다중 상속을 받는 것은 불가능하다.
1 개의 부모 클래스로부터 단일 상속만 허용된다. 하지만 여러 개의 자식 클래스에게 상속이 가능
상속의 사용 (예제)
- 예제1
class A {
String aField = "클래스 A 필드";
public void aMethod() {
System.out.println(aField);
// System.out.println("A : "+ bField);
// 컴파일 에러(자식 필드 사용 불가)
}
}
class B extends A {
String bField = "클래스 B 필드";
public void bMethod() {
System.out.println(aField); // 부모 클래스 필드 사용
System.out.println(bField); // 본인 클래스 필드 사용
// System.out.println("B : "+cField);
// 컴파일 에러(자식 필드 사용 불가)
}
}
class C extends B {
String cField = "클래스 C 필드";
public void cMethod() {
System.out.println(aField); // 조부모 클래스 필드 사용
System.out.println(bField); // 부모 클래스 필드 사용
System.out.println(cField); // 본인 클래스 필드 사용
}
}
public class SuperSubEx01 {
public static void main(String[] args) {
System.out.println("----------A----------");
A a = new A();
a.aMethod(); // 본인 메소드 사용
// a.bMethod(); // A(부모) 객체로 B(자식) 메소드 접근 불가
System.out.println("----------A----------");
System.out.println("----------B----------");
B b = new B();
b.aMethod(); // 부모 메소드 사용
b.bMethod(); // 본인 메소드 사용
// b.cMethod(); // B(부모) 객체로 C(자식) 메소드 접근 불가
System.out.println("----------B----------");
System.out.println("----------C----------");
C c = new C();
c.aMethod(); // 조부모 메소드 사용
c.bMethod(); // 부모 메소드 사용
c.cMethod(); // 본인 메소드 사용
System.out.println("----------C----------");
}
}
A, B, C를 각각 정의하고 A(조부모)→B(부모)→C(자식) 순으로 상속을 받는다.
각 메소드에서 부모 클래스의 필드를 자식 클래스가 사용하여 데이터를 출력한다
main에서 각 클래스 별로 인스턴스를 생성하고 자식 클래스에서 부모 클래스의 메소드를 호출한다
- 예제2
import java.util.Scanner;
class SuperClass {
int a, b; // 필드
public void setA(int a) {
this.a = a; // 필드 a값 설정
}
public void setB(int b) {
this.b = b; // 필드 b값 설정
}
public void sum() {
System.out.println("덧셈 : " + (a + b));
}
public void substract() {
System.out.println("뺄셈 : " + (a - b));
}
}
class SubClass extends SuperClass {
public void mul() {
System.out.println("곱셈 : " + a * b);
}
public void div() {
System.out.println("나눗셈 : " + a / b);
}
}
public class SuperSubEx02 {
public static void main(String[] args) {
System.out.println("2개의 정수 입력");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
SubClass sub = new SubClass();
sub.setA(a); // 매개값 전달
sub.setB(b); // 매개값 전달
sub.sum();
sub.substract();
sub.mul();
sub.div();
}
}
자식 클래스에서 부모 클래스의 기능을 물려받고 필요한 기능을 추가한 예제.
자식 클래스가 부모 클래스보다 더 다양한 기능을 수행할 수 있다.
main에서 서브 클래스로 인스턴스를 생성
💡 요약class /*자식 클래스*/ extends /*부모 클래스*/{ .. }
- 자식은 부모로부터 메소드와 필드를 물려받는다.
2-1. 부모는 자식에서 정의한 메소드나 필드를 사용하지 못한다 (자식 = 자신 + 부모 / 부모 = 자신
) - 자식은 하나의 부모에게만 상속 받을 수 있다.
단일 상속
만 가능하다. - 부모는 여러 자식에게 상속이 가능하다
- 자식 클래스가 더 다양한 기능이 가능하기 때문에
자식 클래스로 인스턴스를 생성하는 것이 효율적
- protected
protected
는pubic
과default
접근 제한의 중간에 해당한다. 같은 패키지에서는 default와 같이 접근 제한은 없지만 다른 패키지에서는 자식 클래스만 접근을 허용한다
Author And Source
이 문제에 관하여(42_JAVA Study 04 - 상속), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soooh_42/42JAVA-Study-04-상속저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)