[Java] 상속 - Extend / 오버라이딩 - Overriding

원준·2023년 7월 12일
0

Java

목록 보기
15/19

상속 ?

  • 큰 틀의 Class가 중복되어 사용되거나, 미리 만들어 놓은 메서드를 사용할 수 있게 물려받는 것을 말한다.
  • 부모와 자식의 관계에 대해서를 말하기도 하며, 상속을 받는 Class에서 상속을 주는 Class의 매게변수와 메서드 등 모든 것을 사용 할 수 있다. (접근 제어자로 인해 차단된 경우 제외)
  • 단 한개의 부모만 가질수 있는 특징이 있다.

    하나의 부모만 가질 수 있는 것이 단점이긴 하지만, 실제 부모 자식관계처럼 자식도 부모가 될 수 있는 것처럼 = 상속도 상속을 받은 자식이 부모로 될 수 있어 데이터를 전달해 줄수 있다.

    즉, 부모 - 자식(부모) - 자식(부모)- 자식(부모) - 자식.... 이런식으로 가능하다.

부모 ? 자식?

  • 사람들의 직업에 따라 다르게 Class를 작성해야한고 했을때, 공통되는 부분 (나이, 성별 등)에 대해 중복되게 사용하는 것 보다 하나의 큰 틀을 만들어 중복되지 않는 부분에 대해서만 작성하 도록 해주는게 좋다.
  • 이러한 방법이 extends 명령어로 인한 상속을 받는다 라고 한다.

예시

  1. Parent.java에서 중복되는 부분에 대해 작성
public class Parent {
	public String name;
	int age;
	private int money;
	
	public Parent(){
		System.out.println("부모 생성자 호출됨!");
	}
	
	public void print(){
		System.out.println(name);
		System.out.println(age);
		System.out.println(money);
	}
	
	public void setMoney(int money) { //변수에 바로 접근을 못하게 하는 이유...
						// 함수로 인해 내가 원하는 방식대로 변화하거나 제한하거나 추가를 할수있기때문이다.
						// 변수에 직접적으로 값을 넣으면 막을수가 없다.
		
		if(money < 0) {
			this.money = 0;
		}else {
			this.money = money;
		}
	}
}
  1. 중복되지 않는 부분에 대해 Child.java를 작성
public class Child extends Parent{
	//
	/*
	 * name, age, money를 만들어서 사용 할려하는데, 
	 * parent에서 선언한 변수가 존재한다. 중복된 변수가 존재하니 해당 클래스의 변수를 사용할 수 있도록 상속받자.
	 * */
	
	String hobby;	
	
	public Child() {
		System.out.println("자식 생성자 호출");
	}
	
	public void printChild() {
		System.out.println(name);
		System.out.println(money); //상속 받은 데이터인데, 엑세스 권한의 타입이 private라서 접근 할수가 없다.
							//상속은 받았지만, 접근 권한이 없는 상황
			//private란? 같은 클래스 내에서만 접근 할 수 있다.
	}
	
	/*
	public void print(){
		System.out.println(name);
		System.out.println(age);
		System.out.println(hobby);
	}*/
	//없어도 Parent에 있는 메서드가 존재하기에 따로 사용이 가능하다.
	
	
	
	// 부모에게 물려 받은 함수이름을 그대로 사용하되,
	// 나에게 맞는 코드로 변환해서 사용하는 방법
		// 메소드 overriding (메소드 오버라이딩)
	@Override
	public void print() {
		super.print(); // 상속 받은 부모의 함수를 사용할려면 super를 사용하자.
			//spuer() 부모의 생성자 생성
			//spuer.name  부모의 메개변수 접근
		System.out.println(hobby);
	}
	
	
}
  1. extends에 의해 상속을 받은 Child는 Parent에 있는 변수와 메서드를 사용할 수 있게 된다.

super ?

  • 자식에서 부모를 통해 Class의 이름을 부르는 것이 아닌 super 명령어로 부르는 것을 말한다.
  • super를 꼭 사용해야 부모에서 사용되 었던 메서드를 그대로 사용하면서, 추가로 사용 작성할 수 있게 된다.

오버라이딩 ?

  • 상속을 받으면서 필수적으로 사용되는 방식이다.
  • 어떻게 보면 오버로딩과 비슷하다고 볼 수 있다.
  • 쉽게 생각하면, 부모의 메서드의 이름을 그대로 사용하면서 내부 로직을 변경 및 추가할 수 잇는 방식이 오버라이딩이다.
    • 예제는 위의 코드에 존재한다.
profile
공부해보자

0개의 댓글

관련 채용 정보