본문 바로가기

Java

상위 클래스와 하위 클래스의 멤버 공유


간단한 것 이지만..
코딩하다가 문득 한번 테스트 해보고 싶어져서 해봤습니다.

최상위 클래스
public class SuperClass {
 List list1 = new ArrayList();
 static List staticList = new ArrayList();
}


하위클래스1

public class SubClass1 extends SuperClass {

}



하위클래스2

public class SubClass2 extends SuperClass {

}



 

 public static void main(String[] args) {
  SuperClass sb1 = new SubClass1();
  SuperClass sb2 = new SubClass2();
  SuperClass sb3 = new SubClass3();
  SuperClass sp = new SuperClass();

//하위 클래스의 객체에서 list1에 값을 넣는다.  
sb1.list1.add("123");
  System.out.println(sb1.list1);
  System.out.println(sb2.list1);
  System.out.println(sp.list1);


//하위 클래스 객체에서 static으로 선언된 맴버 객체에 값을 넣는다.
  sb1.staticList.add("123");
  System.out.println(sb1.staticList );
  System.out.println(sb2.staticList );
  System.out.println(sp.staticList );

//상위 클래스 객체에서 list1에 값을 넣는다.  
  sp.list1.add("abd");
  System.out.println(sb1.list1);
  System.out.println(sb2.list1);
  System.out.println(sp.list1);
 }

//상위 클래스 객체에서 static으로 선언된 맴버 객체에 값을 넣는다.
sp.staticList.add("ZZZ");
System.out.println(sb1.staticList);
System.out.println(sb2.staticList);
System.out.println(sp.staticList);


기본적인 내용이지만
그냥 최상위 클래스가 공통으로 사용 할 멤버 객체를 가지고 있을때
이 클래스를 상속받은 클래스에서 어떻게 공유가 될까... 머리속으로는 대략 이해하고 있었지만
한번 실제로 해보고 싶었죠. ㅎㅎ

결과는
[123]
[]
[]

[123]
[123]
[123]

[123]
[]
[abd]

[123, ZZZ]
[123, ZZZ]
[123, ZZZ]

입니다.

 List list1 = new ArrayList();
 static List staticList = new ArrayList();

이렇게 선언을 했는데 list1같은 경우는  SubClass 객체가 생성 될 때 마다 같이 생성되기 때문에
SubClass sb1과 sb2 그리고 상위클래스인 sp가 각각의 list1을 소유하고 있는 것이 됩니다.

하지만 staticList는 static으로 선언이 되어있습니다.

static으로 선언된 것은 그 클래스가 공유합니다. 즉, staticList는 SubClass던 SuperClass던 객체가 생성될때마다 같이 생성되지 않고, 오직 하나의 메모리에 생성되어 SuperClass 클래스의 객체들이 공유하기 때문에(SubClass도 SuperClass 타입) SubClass sb1과 sb2 그리고 SuperClass sp는 하나의 staticList를 공유하게 됩니다.