: 클래스에 고정
전역적으로 쉽게 재사용하는 잘 변하지 않는 변수나 메서드를 사용할 때 주로 사용.
멤버변수에 사용시
: 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
클래스변수는 인스턴스를 생성하지 않고도 사용 가능. 클래스가 메모리에 로드될 때 생성.
메서드에 사용시
: 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
static 메서드 내에서는 인스턴스 멤버를 직접 사용할 수 없다.
: 변경될 수 없는
단 한 번만 할당할 수 있음.
클래스에 사용시 (ex. String, Math 등..)
: 변경될 수 없는 클래스. 확장할 수 없는 클래스가 된다. (다른 클래스의 조상이 될 수 없다.)
메서드에 사용시
: 변경될 수 없는 메서드. 오버라이딩을 통해 재정의될 수 없다.
멤버변수, 지역변수에 사용시 : 변수 앞에 붙으면 값을 변경할 수 없는 상수가 된다.
final이 붙은 변수는 상수이기때문에 보통은 선언과 동시에 초기화.
하지만 인스턴스 변수의 경우 생성자에 의해 초기화할 수 있다.
: 추상클래스, 추상메서드 구현시 사용.
추상클래스 : 클래스 내에 추상메서드가 선언되어있음을 의미. 미완성 클래스라 객체생성 불가능. 상속으로 완성시키는 클래스.
추상메서드 : 선언부만 작성하고 구현부는 작성하지 않음.
: 접근제어자 : 멤버변수, 멤버함수(메소드), 클래스에 사용되며 외부에서의 접근을 제한하는 역할(캡슐화)을 한다.
public : 접근 제한 x
protected : 같은 클래스, 같은 패키지, 자손 클래스에서 접근 가능
default : 같은 패키지 내에서만 접근 가능. 아무것도 선언 안하면 default
private : 같은 클래스 내에서만 접근 가능.
접근제한이 될 경우 직접 접근이 불가능한 것이지 private 멤버변수를 사용하는 public 메소드가 있다면 그걸 통해 간접적으로 접근은 가능하다.
사용가능한 제어자 조합
주의해야하는 제어자 조합
클래스에 abstract와 final 동시에 사용 불가. final 클래스는 상속 불가.
메서드에 abstract과 static 동시에 사용 불가. static메서드는 추상메서드에 사용안됨.
메서드에 abstract과 private 동시에 사용 불가. 자손 클래스에서 구현해야하므로.
메서드에 private와 final 같이 사용할 필요는 x. 어차피 private은 오버라이딩 불가라 하나만 사용해도 충분.
캡슐화/다형성은 #4 OOP문서 참고.
: 기본형 변수처럼 참조변수도 형변환이 가능하다. 단, 상속관계에서만 형변환이 가능하다.
사용할 수 있는 멤버의 개수를 조절하는 것. 조상, 자손관계의 참조변수는 서로 형변환 가능.
Army ChoonA = new Army();
// 자손 인스턴스(Army)가 조상 인스턴스(People)로 형변환
People ChoonP = (People) ChoonA; // (People) 작은개념이 큰개념으로 가므로 조상클래스는 생략 가능!
// 조상 인스턴스(People)가 자손 인스턴스(Army)로 형변환
Army ChoonB = (Army) ChoonP // (Army) 큰개념이 작은개념으로 가므로 자손클래스는 생략 불가능!
A(객체) instanceof B(클래스)
로 A객체가 B클래스를 상속받았는지 확인 가능.: 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
메서드의 매개변수를 지정할 때 조상타입으로 지정하면 그 자손타입들을 매개변수로 쓸 수 있다.