프로그래밍언어/Java_Language
Java 8일차 : static 멤버, final
Great king
2018. 11. 14. 12:46
static 으로 선언된 클래스의 멤버를 "정적 멤버" 라고 부르는데, 주로 공용을 목적으로 할 때 쓰인다.
공용의 개념이란,
이 클래스에서만 사용이 국한되어는 것이 아니라 그 어떤 객체도 접근하고 사용 가능하다는 것이다.
따라서 static 으로 선언되어 있는 메인 메소드는 다른 클래스에서도 메인 메소드의 역할을 할 수가 있는것이다.
예제)
class StaticSample {
int n; // non-static 필드
voidg() {...} // non-static 메소드
static int m; // static 필드
static voidf() {...} //static메소드
}
※static 의 활용
전역 변수와 전역 함수를 만들 때 활용
전역변수나 전역 함수는 static으로 클래스에 작성
※공유 멤버를 작성할 때
static 필드나 메소드는 하나만 생성. 클래스의 객체들 공유
※static 메소드의 제약 조건
static 메소드는 non-static 멤버 접근할 수 없음
객체가 생성되지 않은 상황에서도 static 메소드는 실행될 수 있기 때문에,
non-static 메소드와 필드 사용 불가
반대로, non-static 메소드는 static 멤버 사용 가능
static 메소드는 this 사용불가
static 메소드는 객체가 생성되지 않은 상황에서도 호출이 가능하므로, 현재 객체를 가리키는 this 레퍼런스 사용할 수 없음
------------------------------------------------------------------------------------------
final 클래스 - 클래스 상속 불가
final classFinalClass {
.....
}
class SubClass extendsFinalClass{ // 컴파일오류.FinalClass상속 불가
.....
}
------------------------------------------------------------------------------------------
final 메소드 - 오버라이딩 불가
public class SuperClass {
protected final intfinalMethod(){ ...}
}
class SubClass extends SuperClass { //SubClass가 SuperClass 상속
protected int finalMethod() {... } // 컴파일오류, 오버라이딩 할 수없음
}