본문 바로가기

언어/Java

상속 예제

class ParentsVariable1{
	int a;
	void pm1() {
		System.out.println("ParentsVariable1의 a=" + a);
	}
}

class ParentsVariable2 extends ParentsVariable1 {
	void pm2() {
		System.out.println("ParentsVariable2의 a=" + a);
	}	
}

class ChildVariable extends ParentsVariable2 {
	String a;
	void cm() {
//		System.out.println("ChildVariable의 a=" + a);
//		= System.out.println("ChildVariable의 a=" + this.a);
		System.out.println("ChildVariable의 a=" + this.a + ", ParentsVariable1의 a=" + super.a );
															// 현재 사용중인 객체의 부모영역을 지칭하는 예약어 super, super.super은 불가능. .연산자 앞에서 1번만 사용가능
	}
}


public class InheritanceVariable {

	public static void main(String[] args) {
		ParentsVariable1 pv1 = new ParentsVariable1();
		pv1.a = 9;
		
		ParentsVariable2 pv2 = new ParentsVariable2();
		pv2.a = 99;
		
		ChildVariable cv = new ChildVariable();
		cv.a = "HELLO";
		cv.cm(); // 자기 객체/method의 a변수, ChildVariable의 a=HELLO
		cv.pm2(); // ParentsVariable2의 a=0, 상속된 a 변수의 값이 출력됨.
		cv.pm1(); // ParentsVariable1의 a=0 부모의 변수가 자식쪽에서 덮어쓰기 될 수 있으니 주의	
	}
}

결과
부모 변수가 먼저 자식 변수가 나중에 메모리 할당, 부모영역 PV1,2 자식영역 CV

둘 다 사용할 수는 없음. 덮어쓰기 됨. 부모 쪽 변수 먼저 만들어졌다가 자식 쪽 변수 똑같이
만들어지니까 부모쪽 변수가 가려지고 자식쪽 변수가 사용됨

class ParentMethod1{
	void pm1() {
		System.out.println("ParentMethod1의 pm1()입니다");
	}
	
	void m() {
		System.out.println("ParentMethod1의 m()입니다");
	}
}

class ParentMethod2 extends ParentMethod1{
	void pm2() {
		System.out.println("ParentMethod2의 pm2()입니다");
	}
}

class ChildMethod extends ParentMethod2{
	void cm() {
		System.out.println("ChildMethod의 cm()입니다");	// 부모와 다른 메서드 이름
	}
	void m() {
		System.out.println("ChildMethod의 m()입니다");
		super.m(); //ParentMethod1의 m()입니다
	}
}

public class InheritanceMethod {

	public static void main(String[] args) {
		ChildMethod cm = new ChildMethod();
		cm.m(); //ChildMethod의 m()입니다
		
		cm.cm();
		cm.pm2();//ParentMethod2의 pm2()입니다
		cm.pm1();//ParentMethod1의 pm1()입니다

		ParentMethod2 pm2 = new ParentMethod2();
		pm2.m();// 내꺼가 없으면 자식은 부모꺼 가져올수있으나 부모는 자식꺼 못가져옴
//		pm2.cm();
		pm2.pm2();
		pm2.pm1();

	}
}

결과

'언어 > Java' 카테고리의 다른 글

업캐스팅(Upcasting), 다운캐스팅(Downcasting)  (0) 2023.08.01
오버라이딩(Overriding)과 다형성(Polymorphism)  (0) 2023.07.31
상속(Inheritance)  (0) 2023.07.31
싱글톤  (0) 2023.07.31
패키지  (0) 2023.07.31