Beny's Study

10_1. [강의] 상속 기본흐름 본문

[JAVA]/08. 상속

10_1. [강의] 상속 기본흐름

76beny 2022. 5. 28. 23:36
 

 

SuperClass

package com.kh.ex02.test_inherit;

public class SuperClass {// SuperClass : 부모(조상) 클래스
	private   int 	privateValue 	= 5; //외부에서 사용불가 ( private여서)
	protected int 	protectedValue 	= 10;//외부에서 사용가능
	public    int	publicValue 	= 20;//외부에서 사용가능

	public SuperClass() {
		System.out.println("I am a super class");
	}
	

	public void publicmethod() {
		System.out.println("Call SuperClass's publicMethod!");

	}
	
	//private라서 접근할수 있게 getter와 setter 생성자 만듬
	public int getPrivateValue() {
		return privateValue;
	}

	public void setPrivateValue(int privateValue) {
		this.privateValue = privateValue;
	}
}

 

 

ChildClass

package com.kh.ex02.test_inherit;

public class ChildClass extends SuperClass {
	private int privateValue = 105;
	protected int protectedValue = 110;
	public int publicValue = 120;

	public ChildClass() {
		super();

		int publicValue = 300;
		// 자신의 멤버변수 호출
		System.out.println("My privateValue : " + this.privateValue);
		System.out.println("My privateValue : " + this.protectedValue);
		System.out.println("My privateValue : " + this.publicValue);
		System.out.println("Local privateValue : " + publicValue);

		// 부모의 멤버변수 호출
		//System.out.println("Super privateValue : " + super.privateValue);//호출불가 밖에서 사용 불가능해서
		// 얘를 사용하고 싶으면 부모클래스에서 게터세터 만들고 자식클래스에서 super.getprivateValue로 작성
        
		System.out.println("Super privateValue : " + super.getPrivateValue());
		System.out.println("Super protectedValue : " + super.protectedValue);
		System.out.println("Super  publicValue: " + super.publicValue);
		System.out.println("Super publicValue : " + super.publicValue);
	}

	@Override //alt + shift + S
	public void publicmethod() {
		System.out.println("Call ChildClass's publicMethod");
		super.publicmethod();
        // 강제로 부모의 publicMethod 호출하는 법, 없어도 된다!!(부모꺼 호출할 일 있으면 하는거고 없으면 안해도됨)
	}

}

public class ChildClass extends SuperClass

extends : SuperClass 부모클래스를 ChildClass에 상속시킨다

 

public ChildClass()의 super();

부모의 생성자 호출, 생략해도 자동으로 생성시켜준다,부모생성자 호출해야 부모클래스->자식클래스

 

syso부분이 출력예정인 결과들

My privateValue : 105
My privateValue : 110
My privateValue : 120
Local privateValue : 300
Super privateValue : 5
Super protectedValue : 10
Super  publicValue: 20
Super publicValue : 20

 

super.getPrivateValue() 이유

접근제한자가 private로

얘를 사용하고 싶으면 부모클래스에서 getter,setter 생성 후 자식클래스에서 super.getprivateValue로 작성.

getter,setter는  선언할때 Public으로 접근제한자 니까 불러오는게 가능,

 

@Override

생성방법 : alt + shift + S

상속된 부모에서 가져온 메소드라는것을 표시

 

 

Run

package com.kh.ex02.test_inherit;

public class Run {
	public static void main(String[] args) {
    	//[출력 1]
		System.out.println(" SuperClass 생성!");
		new SuperClass();// SuperClass에 있는 메서드 출력
		System.out.println("SuperClass 생성 끝!");

		//[출력 2]
		System.out.println("ChildClass 생성!");
		new ChildClass();//ChildClass에 있는 메서드 출력
		System.out.println("ChildClass 생성 끝!");

		
        //[출력 3]
		System.out.println("강제호출 !");
		new ChildClass().publicmethod();
		System.out.println("강제호출 끝!");

	}

}

[출력 1]

 SuperClass 생성!
I am a super class
SuperClass 생성 끝!

 

[출력 2]

ChildClass 생성!
I am a super class
My privateValue : 105
My privateValue : 110
My privateValue : 120
Local privateValue : 300
Super privateValue : 5
Super protectedValue : 10
Super  publicValue: 20
Super publicValue : 20
ChildClass 생성 끝!

 

[출력 3]

강제호출 !
I am a super class
My privateValue : 105
My privateValue : 110
My privateValue : 120
Local privateValue : 300
Super privateValue : 5
Super protectedValue : 10
Super  publicValue: 20
Super publicValue : 20
Call ChildClass's publicMethod
Call SuperClass's publicMethod!
강제호출 끝!

 


"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.

이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우

민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."