11일차 - 오버 로딩, this와 super, 접근 제한자(상속)
안녕하세요. pitang입니다.
오버 로딩, this와 super, 접근 제한자 까지 알아보도록 하겠습니당.
오버 로딩
오버 로딩은 메서드 중복이라고 한다.
중복은 메서드 또는 생성자를 선언할 때 이름은 같지만 매개 변수의 유형이나 개수를 다르게 선언해 놓는 것을 의미한다.
중복은 이름이 똑같아야 하고, 변수의 유형, 개수, 순서가 달라야 한다. 반환 유형은 상관이 없다.
ex)



this
this는 자기 자신 객체를 지정할 때 사용하는 키워드이다.
this. 을 사용하면 동일 클래스 내의 멤버를 참조할 수 있고
this()를 사용하면 생성자 내부에서 자신의 다른 생성자를 호출할 수 있다.
쉽게 this.으로 나의 멤버 변수의 접근 가능, this()로 나의 생성자의 접근 가능이다.
ex)






super
super는 한 단계 위 부모 클래스의 객체를 지정할 때 사용하는 키워드이다.
super. 을 사용하면 부모 클래스의 멤버를 참조할 수 있고
super()를 사용하면 생성자 내부에서만 사용이 가능하며, 부모 클래스의 생성자를 호출하는 데 사용한다.
생성자의 첫 라인에는 반드시 this(), super()가 있어야 한다.
하지만, 이를 쓰지 않았다면 묵시적으로 super()가 삽입되어 부모 클래스의 기본 생성자를 자동으로 호출한다.
사용하는 위치는 반드시 생성자 블록 내부의 첫 라인에 기술해야 한다.
object -> 부모클래스 -> 자식 클래스
ex)







접근 제한자
접근 제한자는 클래스와 멤버 변수, 메서드, 생성자의 접근을 제어할 수 있는 제한 자이다.
처음에는 조금 지저분해 보일 수 있지만 정말 편한 문법이다.
접근 제한자의 종류는
public - 같은 클래스, 같은 패키지, 다른 패키지를 막론하고 접근 가능.
protected - 같은 클래스, 같은 패키지 접근 가능, 다른 패키지에 속해있는 클래스인 경우 상속관계가 없으면 접근 불가능.
default - 같은 클래스, 같은 패키지 접근 가능, 패키지가 다른 경우 접근 불가능.
private - 같은 클래스 내부가 아니면 접근 불가능.
이 있다.
솔직히 이론으로는 잘 이해가 안 갔지만 예시로 보니까 이해가 갔기에 바로 예시를 보도록 하자.
ex1)



C에서 보이듯 public 제한자는 같은 클래스, 같은 패키지, 다른 패키지를 막론하고 접근이 가능하기에 A클래스만 사용이 가능하다.
ex2)



A에서 멤버 변수와 생성자를 각각의 제한자로 생성해보고 pac1_B와 pac2_C에서 사용해보면
같은 패키지에 있는 B에서는 public과 default가, 다른 패키지에 있는 C에서는 public만 사용되는 것을 알 수 있다.
ex3)



ex3과 같은 결과를 볼 수 있다.
ex4)



C클래스에서 protectedsms super를 통한 참조를 허용한다.
원래는 보이지 않던 protected 함수들이 super를 통해 접근이 가능하다는 뜻이다.
감사합니다.
*m1맥북을 사용 중입니다.*