BackEnd/Java

[Java] 상속 오버라이드(@Override)

Cune 2021. 12. 15. 22:23

 

1. 

public class ParentClass {

	public void pMethod() {

		System.out.println("ParentClass()");	//내용 고쳐쓰기 
	}
}
public class ChildClass extends ParentClass{
	
	@Override
	public void pMethod() {
		super.pMethod(); //가장 첫번째 줄에 쓸 것
		System.out.println("ChildClass pMethod");
	}
	
	public void func() {	//자식클래스에만 있는 메소드 
		pMethod();	//Child Class에 있는 메소드를 호출 
		super.pMethod();	//ParentClass 메소드 호출
	}
}
import cls.ChildClass;

public class MainClass {

	public static void main(String[] args) {
	
		ChildClass cc = new ChildClass();	//ChildClass 객체 생성
		cc.pMethod();	//ParentClass에서 물려받은 메소드를 ChildClass에서 호출

	}
}

 

2. 

public class ParentClass {
	
	public void Method() {
		System.out.println("ParentClass Method()");
	}
	
	public void func() {
		System.out.println("ParentClass func()");
	}
}
public class ChildClass extends ParentClass{
	
	public void Method() {	//override
		System.out.println("ChildClass Method()");	//프린트내용 변경
	}
	
	public void function() {	//ChildClass 메소드 생성
		System.out.println("ChildClass function()");
	}
}
import cls.ChildClass;
import cls.ParentClass;

public class MainClass {

	public static void main(String[] args) {
		
//		ChildClass cc = new ChildClass();
//		cc.Method();

		ParentClass pc = new ChildClass();	
		//자식객체 생성 인스턴트는 parent 
		//부모에게 오버라이딩 된 것만 가능
		
		pc.Method(); //child에 오버라이드 된 메소드를 가져옴 
		pc.func();	//Parent에 있는 메소드 == Child에 오버라이딩 된 메소드
		
	//	pc.function(); //자식에 새로 만든건 불가능 
		
		ChildClass cc = (ChildClass)pc; //강제변환 (Parent->Child)
		cc.function();	//가능 
		
		
		
	}

}

Override 오버라이드 Overroad 오버로드
기존 Class와 매개변수의 타입, 개수, 순서를 다르게한다. 기존 Class내에 있는 메소드를 다르게(재정의)한다.
Super()  Super.
부모클래스에 있는 생성자를 가리킨다. 부모클래스의 주소를 가리킨다.
부모 객체 참조, 부모 메소드 직접 접근 가능

 

자식클래스에서  오버라이딩 시 -> 부모클래스의 메소드는 숨겨지고 오버라이딩 된 자식메소드를 사용한다.

하지만 부모클래스의 메소드를 호출할 시 super.method(); 처럼 super키워드를 붙여서 부모 메소드를 호출한다.