□ 상속
상속(Inheritance)이란 물려준다는 의미로 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 말한다.
위 코드에서 Calculator클래스의 메소드를 사용 할 수 있는 이유는
하위 클래스인 SubstrationableCalculator가 extends를 통해 Calculator을 상속받았기 때문이다.
□ 상속과 생성자
- 객체를 생성할 때 자동으로 생성자를 만들어준다.
- 매개변수가있는 생성자를 정의해놓은 상태이면 생성자를 자동으로 만들어주지 않는다.
- 생성자를 통해서 left, right의 값을 설정해준다.
□ super() : 하위 클래스에서 상위 클래스 생성자를 호출
※ 하위 클래스의 초기화 코드는 super()보다 앞에 와서는 안된다
publicCalculator() {} → 기본 생성자
publicCalculator(intleft, intright) → 매개변수가 있는 생성자
만약 위 코드에서 super()이 없다면 오류가 발생한다.
하위 클래스가 호출될 때 자동으로 상위 클래스의 기본 생성자를 호출하게 되는데, 상위 클래스에 매개변수가 있는 생성자가 있다면 자바는 자동으로 상위 클래스의 기본 생성자를 만들지 않기 때문이다.
□ 오버라이딩(overriding)
상속받은 상위 클래스의 메소드를 하위 클래스가 기본적인 동작방법을 변경하는 기능을 메소드 오버라이딩(overriding)이라고 한다.
※ overriding 조건
- 메소드의 이름
- 메소드 매개변수의 숫자와 데이터 타입 그리고 순서
- 메소드의 리턴 타입
상, 하위 클래스 모두 다음과 같은 메소드를 포함하고있다. public void sum( ) { }
하위 클래스에서 해당 부분을 overriding 한 코드이다.
□ super.상위 메소드
메소드 오버리이딩을 통해서 avg를 불러 왔으나 ((this.left + this.right) / 2); 다음 코드가 중복이 발생한다.
이를 해결하기 위해 아래와 같이 수정 가능하다.
super.메소드 : 상위 클래스의 메소드를 불러옴
□ 오버로딩(overloading)
예제로 사용하던 Calculator에 setOpands는 2개의 매개변수만 받을 수 있는 상황이다.
이걸 3개의 매개변수를 받게 하기위해서 아래와같이 추가한다.
자바에서는 메소드명이 같더라도 매개변수,인자가 다르면 문제가없다.
하지만 위 코드에서도 중복이 발생하고있다.
※ overloading 규칙
출처 : 생활코딩 유튜브 :
https://www.youtube.com/watch?v=QK8bgsenqLY&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=84