상세 컨텐츠

본문 제목

윤성우 자바 chapter 14-2 <클래스 변수, 클래스 메소드와 상속>

JAVA

by 빙하둘리 2022. 7. 6. 16:25

본문

728x90

윤성우 자바 chapter 14-2 <클래스 변수, 클래스 메소드와 상속>

앞서 배운 클래스 변수의 특성 두 가지

클래스 변수의 특성 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 메소드의 상속 여부]

프로그램 전체 영역에서 딱 하나 존재하는 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로 선언되어 있으면 자식 클래스에서 접근 불가능

728x90

'JAVA' 카테고리의 다른 글

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

관련글 더보기

댓글 영역