글 작성자: 취업중인 피터팬
728x90
기본 환경
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

 

목표

상속받았을 때 static을 사용하는 법을 이해한다.


 

 

코드
package ex12inheritance;

/*
 static(정적) 타입의 맴버도 상속이 되고 , 하위 클래스에서 접근할때는
 맴버변수의 이름만으로 접근이 가능하다.
 단, 클래스 외부에서 접근할 경우 객체생성 없이 클래스명을 통해서도
 접근이 가능하다. 즉 static이 가진 기본적인 규칙을 그대로 따른다.
 */
class Adder {
	public static int val = 0;
	
	/*
	 static으로 선언되 맴버변수는 실제로는 외부(메소드 영역)에
	 생성되어 있으므로 클래스명을 통한 접근이 허용된다.
	 코드 레벨에서 보면 해당 클래스의 맴버변수으므로 변수명만으로 
	 접근하는 것도 가능하다.
	 */
	public void add(int num) {
		val += num;
		Adder.val += num;
	}
}


//자식 클래스의 맴버메소드는 모두 실행가능한 코드임. 접근의 문제 없음.
class AdderFriend extends Adder{
	public void friendAdd(int num) {
		val += num;
		Adder.val += num;
	}
	public void showVal() {
		System.out.println("val = " + val);
		System.out.println("val = " + Adder.val);
	}
}

public class E03StaticInheritance {
	public static void main(String[] args) {
		Adder ad = new Adder();
		AdderFriend adFriend = new AdderFriend();
		
		ad.add(1);
		adFriend.friendAdd(3);
		Adder.val += 5;
		AdderFriend.val += 7;
		
		adFriend.showVal(); 
	}
}

 

원래의 static 규칙과 똑같습니다. 다만 상속받았을 경우 클래스명을 구지 쓰지 않아도 된다는 특징이 있습니다.

 

 

결과 값