상속

한상우·2022년 9월 27일
0

java

목록 보기
4/16

상속

  1. Has a 상속 (포함 개념 / 컴퓨터 - RAM, DISK)
  1. Is a 상속 (일반적 개념, 구체적 개념)

생성자

class Exam {
    private int kor;
    private int eng;

    public void init() {
        kor = 10;
        eng = 20;
    }
}

클래스 내부의 변수 값을 초기에 지정해주고 싶을 때 init() 이라는 임의의 함수를 만들어
해줄 수도 있을텐데, 이러한 함수를 초기화 함수라고 하지는 않는다.
초기화 함수란
1. 객체가 태어나면서 가지는 값이어야 한다.
2. 단 한 번만 호출 될 수 있어야 한다.

때문에 생성자를 사용하는 것이다.

  • 기본 생성자
  • 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다.
  • 생성자가 구현되어 있지 않은 경우, 컴파일러가 자동으로 생성자 코드를 넣어준다.
class Exam {
    private int kor;
    private int eng;
    
    public Exam() {}
}
  • 오버로드 생성자
  • 생성자를 두 개 이상 구현하는 경우를 생성자 오버로딩이라고 한다.
class Exam {
    private int kor;
    private int eng;

    public Exam() {}

    public Exam(int kor) {
        this.kor = kor;
    }

    public Exam(int kor, int eng) {
        this.kor = kor;
        this.eng = eng;
    }
}
  • 참고) get함수와 set함수를 사용하는 이유??
  • 객체 지향 프로그래밍 방식은 필요한 로직이나 기능을 수행할 수 있는 객체에게
    내가 원하는 일을 요청하는 형태로 이루어져야 하는데 클래스의 변수를 public으로 하고 직접 값을 대입해버리면 메소드를 통해 만들어진 데이터가 의미가 없어지게 되는 것

  • set 함수를 통해 코드에서 무결성을 보장할 수 있고

  • 메소드 내에서 변수에 값을 할당할지 제약 조건을 걸 수도 있다.

  • setter를 이용해서 객체를 설정하게 되면, 우리는 그것을 DI라고 부른다

extends

부모 클래스를 가지는 클래스는 extends를 통해 상속받을 수 있다.

class SangWooExam extends Exam { }

이때 SangWooExam으로 생성되는 객체는 하나의 공간에 아래와 같이 super, this가 만들어진다.

(super는 부모를, this는 본인을 가리킨다)

오버라이드

메소드를 재정의 하는 것이다.
객체가 가지고 있는 정보를 가지고 함수를 호출하는 것인데, 전달 객체에 의해서 동적 바인딩이 이루어진다.

A <- B 인 상황에서

  • A a = new B(); (부모는 자식을 포함할 수 있다)


a.f2()가 호출된다면 객체 오버라이드 한게 먼저가 되어, a의 f2를 호출하면 바로 b의 f3을 호출하게 된다

profile
안녕하세요 ^^

0개의 댓글