앞서 배운 클래스 변수의 특성 두 가지
클래스 변수의 특성 2가지
1. 인스턴스 생성 이전부터 접근이 가능하다.
2. 어떤 인스턴스에도 속하지 않는다.
p.224 <ClassMethod.java>
class NumberPrinter {
private int myNum=0;
static void showInt(int n) { //클래스 메소드 (static 메소드)
System.out.println(n);
}
static void showDouble(double n) { //클래스 메소드
System.out.println(n);
}
void setMyNumber(int n) { // 인스턴스 메소드
myNum=n;
}
}
class ClassMethod {
public static void main(String[] args) {
NumberPrinter.showInt(20); //클래스 이름을 통한 클래스 메소드 호출
NumberPrinter np = new NumberPrinter();
np.showDouble(3.15); // 인스턴스 이름을 통한 클래스 메소드 호출
np.setMyNumber(75);
np.showMyNumber();
}
}
프로그램 전체 영역에서 딱 하나 존재하는 static 변수
static 변수는 부모 것이 아니다. 그러니 자식에게 상속이 안 된다!
SuperCLS를 생성해도 SuperCLS 클래스 내부에 (static 변수인) count가 없는데(SuperCLS의 맨 윗줄에 static 변수를 선언한 것과 별개로 다른 메모리 공간에 static 변수가 있다.)
SubCLS(자식 클래스)가 SuperCLS(부모 클래스)를 상속받으면 당연히 없다.
==>클래스 변수, 클래스 메소드는 상속의 대상이 아니다.
SuperCLS의 맨 윗줄에 static 변수를 선언하였기에, SuperCLS.count;처럼 .을 찍지 않고도 다음과 같이 접근이 가능하다.
class superCLS {
static int count = 0;
public SuperCLS() { //생성자(Constructor) 값을 반환하지 않으며 클래스 이름과 동일
count++; //클래스 내에서는 직접 접근이 가능
}
}
자식 클래스에도 .을 찍지 않고 count에 접근할 수 있는 권한이 있다. (부모 클래스에서도 count에 직접 접근할 수 있는 동일한 권한이 있다.)
class SuperCLS {
static int count = 0;
public SuperCLS() { //생성자(Constructor) 값을 반환하지 않으며 클래스 이름과 동일
count++; //클래스 내에서는 직접 접근이 가능
}
}
class SubCLS extends SuperCLS {
public void showCount() {
System.out.println(count); //상위 클래스에 위치하는 static 변수에 접근
}
}
물론 부모 클래스에서 위치하는 static 변수가 private으로 선언되었어야 자식 클래스에서도 해당 static 변수에 접근이 가능하다. ex) private static int count=0;
static 변수가 protected로 선언되어 있으면 자식 클래스에서 접근 불가능
25-2. 매개변수의 가변 인자 선언 (0) | 2022.09.13 |
---|---|
25-1. 열거형 ② (0) | 2022.09.12 |
25-1. 열거형 ① (0) | 2022.09.10 |
익명(anonymous) 내부 클래스 참고 자료 및 정리 (0) | 2022.09.10 |
멤버변수(필드)와 지역변수 개념 (0) | 2022.07.08 |
댓글 영역