Java 상속, super

김정훈·2024년 4월 17일

Java

목록 보기
15/48

상속

1. 상속

  • B클래스는 A클래스를 상속받으면 B클래스는 A클래스의 메서드를 사용할 수 있습니다.
  • 객체 지향 프로그램은 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 그 기반이 되는 기술이 상속

2. 클래스의 상속

자식클래스가 부모클래스에서 상속
부모 클래스(parent class)를 '상위클래스', 자식 클래스를 '하위 클래스' 등으로 부르기도 합니다.

3. 클래스 상속 문법

class 하위클래스 extends 상위클래스{
//하위클래스는 상위클래스에 정의된 자원들을 사용가능
}
//A클래스(부모클래스)
public class A {
    int numA= 10;
}
//B클래스(자식클래스)
public class B extends A {
}
//main
public class Ex01 {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.numA);
    }
}

super

  • 모든메서드의 지역변수로 존재
  • 컴파일러가 자동으로 생성
  • super : 상위 클래스객체의 주소값이 있는 지역변수
  • super() : 상위클래스의 생성자 함수를 클래스 내부에서 호출할때 사용
  • 참고
    this : 현재 클래스의 객체의 주소값
    this() : 현재 클래스의 생성자 함수를 클래스 내부에서 호출할때 사용
public class A {
}
- - - - - - - - - - - - - - - - - - - - -
public class B extends A{
   public B(){
       super();
   }
}
- - - - - - - - - - - - - - - - - - - - -
public class C extends B{
   public C(){
       super();
   }
}

c()생성자 👉 super() 👉 B()생성자 👉 super() 👉 A()성자

매개변수가 있는 생성자 호출하기

public class Student {
    protected int id;
    protected String name;

    public Student(int id, String name){
        this.id = id;
        this.name = name;
    }
}
----------------------------------------
public class HighSchoolStudent extends Student{
	public HighSchoolStudent(){
    }
    @Override
    public String toString() {
        return "HighSchoolStudent{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

상위클래스(Student)에는 매개변수를 가지고있는 메서드가 정의되어있기 때문에 하위클래스(HighSchoolStudent)에서 매개변수가없는 super를 정의하게된다면, 오류가 발생한다.

그렇기 때문에 아래와 같은 방법을 상황에맞게 선택해서 해결해야한다.
1. 상위클래스에서 매개변수가없는 생성자를 정의하기
2. 하위클래스 생성자 내부에 매개변수가있는 super() 정의하기.

public class Student {
    protected int id;
    protected String name;
// 1. 상위클래스에서 매개변수가없는 생성자를 정의하기    
    public Student(){] 

// 2. 하위클래스 생성자 내부에 매개변수가있는 super() 정의하기.
    public Student(int id, String name){

        this.id = id;
        this.name = name;
    }
}
----------------------------------------
public class HighSchoolStudent extends Student{

// 1. 상위클래스에서 매개변수가없는 생성자를 정의하기   
    public HighSchoolStudent(){}
    
// 2. 하위클래스 생성자 내부에 매개변수가있는 super() 정의하기.
    public HighSchoolStudent(){
        super(15,"이름"); 


    }
    @Override
    public String toString() {
        return "HighSchoolStudent{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
profile
안녕하세요!

0개의 댓글