package com.ohgiraffers.section03.overriding;
/* 설명. class가 final 키워드가 붙으면 부모 클래스가 될 수 없다. */
//public final class SuperClass {
public class SuperClass {
/* 수업목표. 오버라이딩(Overriding)에 대해 이해할 수 있다. */
// 오버라이딩은 상속이 되고 나야 의미가 있다.
public void method(int num) {}
public Object method2(int num) {return null;} // 반환형이 Object
private void privateMethod() {}
public final void finalMethod() {} // final -> 자식에게 물려주지 않는 마지막 메소드 (마지막 선이다...), 상속만 안되게 다른 데에선 사용 가능
protected void protectedMethod() {} // protected -> 내 자식이면 어디서든 접근할 수 있다.
/* 설명. default 접근 제어자는 접근제어자를 쓰지 않는 것이다. */
void defaultMethod() {} // default ->나랑 다른 패키지에서 호출할 수 없다.
}
package com.ohgiraffers.section03.overriding;
public class SubClass extends SuperClass {
/* 설명. 부모 메소드와 이름, 반환형, 매개변수, 접근제어자 모두 동일하게 오버라이딩 */
@Override
public void method(int num) {
}
/* 설명. 메소드 이름변경(새로운 메소드 생성한 셈) */
// @Override
// public void method1(int num) {
// }
/* 설명. 메소드 리턴 타입 변경(새로운 메소드 생성한 셈) */
// @Override
// public String method(int num) {
// return null;
// }
/* 설명. 경우에 따라서는 메소드의 반환형을 달리 할 수도 있다.
(부모 메소드의 리턴타입의 자식 타입으로는 가능) */
@Override
public String method2(int num) {
return null;
}
/* 설명. private 메소드는 오버라이딩 불가 */
// @Override
// private void privateMethod() {}
/* 설명. final 메소드는 오버라이딩 불가 */
// public void finalMethod() {}
/* 설명. 부모 메소드가 protected면 어디서든(어느 패키지든) 접근해서 오버라이딩 가능 */
// @Override
// protected void protectedMethod() {} //이름 중복 땜에 주석처리
/* 설명. 부모 메소드의 접근제어자와 같은 범위이거나 더 넓은 범위는 가능 */
@Override
public void protectedMethod() {}
}