
-이미지 출처
공개범위는 public > protected > default(생략) > private 순으로 좁아진다.
접근제어자는 생략가능하며 생략했을 때는 자동으로default임을 뜻한다.
클래스를 정의할 때 사용할 수 있는 접근제어자는 public과 default(생략) 두가지다.
1. public 클래스 : public을 사용하면, 모든 클래스에서 이 클래스에 접근이 가능하다. (패키지에 상관없음)
2. default(생략) 클래스 : 클래스앞에 접근제어자가 없으면 default 클래스로, 같은 패키지 안의 클래스에서만 접근이 가능하다.
생성자를 이용한 final 멤버 변수의 초기화
1. final이 붙은 변수는 상수라서 선언과 동시에 초기화
2. 인스턴스 변수의 경우 생성자에서 초기화
클래스 내에 매개변수를 갖는 생성자를 선언하여, 인스턴스를 생성할 때 final이 붙은 멤버변수를 초기화하는데 필요한 값을 생성자의 매개변수로 제공받는 것이다.
이 기능을 이용하면 final이 붙은 멤버변수가 다른 값을 갖도록하는 것

1) 메서드에 static과 abstract를 함께 사용할 수 없다.
: static 메서드는 몸통이 있는 메서드에만 사용할 수 있기 때문
2) 클래스에 abstract와 final을 동시에 사용할 수 없다.
:클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
3) abstract메서드의 접근 제어자가 private일 수 없다.
: abstract메서드는 자손클래스에서 구현하기 위해 접근해야 하기 때문이다.
4) 메서드에 private와 final을 같이 사용할 필요는 없다
: 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.
참고한 주소
https://88240.tistory.com/448
https://pridiot.tistory.com/46