본문 바로가기
프로그래밍/java

java 상속, super 정리

by 뜨끔쓰 2019. 4. 26.
728x90
728x90

안녕하세요


이번시간엔 java의 상속과 super메소드에 관하여 알아보려고합니다.





상속이란?

java의 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이라고 한마디로 정의가 가능합니다.
또한 자식은 부모클래스의 모든 멤버를 상속받으며, 자바의 상속은 단일 상속이다. (따라서 상속받을 수 있는 클래스는 단 하나입니다.)

사용방법

상속을 받고싶은 클래스에 extends라는 키워드를 사용하여 부모클래스를 상속받을 수 있습니다.
예제코드를 통하여 확인해보록할꼐요.
일단 부모 클래스인 Car입니다.

public class Car { String name; //차의 이름 String createName; //차의 제조년도 String getName() { return name; } String getCreateName() { return createName; } }


자동차의 이름과 제조년도를 넣을 수 있는 String 자료형의 name, createName 변수입니다.

또한 이름과, 제조년도를 리턴 해주는 메소드도 정의 해주었습니다.


이제 이 Car클래스를 부모로 하는 Sonata라는 클래스입니다.

public class Sonata extends Car {

}


Sonata클래스에는 아무것도 정의해주지 않았죠?? 그런데 Main에서 이게 어떻게 쓰이나 확인해봅시다.

public class Ex_extends {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Sonata sona1 = new Sonata();
		
		sona1.name = "빵빵이";
		
		System.out.println(sona1.getName());

	}

}


실행한 결과




보시면 Sonata자료형의 sona1이라는 인스턴스를 생성해주었습니다.

그런데 Sonata클래스에서는 정의도 하지 않은 name이라는 변수에 빵빵이라는 값을 넣어주고 있죠? 또한 getName()이라는 메소드도 정의하지 않았는데 사용이 가능합니다. 이게 어찌된 일일까요?!


바로 Sonata클래스에서 extends 키워드를 사용하여 Car클래스를 상속했기 때문입니다.

이처럼 상속을 이용하면 불필요하게 소스코드를 작성하지 않아 코드의 재사용성을 높힐 수 있습니다.


또한 생성자의 상속도 가능한데요 일단 super에 대하여 알아보고 설명드릴께요.




super란?

super는 자식클래스에서 부모클래스의 변수, 메소드를 사용하거나 부모클래스의 생성자를 사용하고싶을때 사용합니다.

우선 부모의 변수및 메소드를 사용하는 경우부터 확인해볼께요

부모클래스인 Car입니다.


public class Car {
	String name;
	String createName;
	
	String getName(int num) {
		return name;
	}
	
	String getCreateName() {
		return createName;
	}
}


자식클래스인 Sonata입니다.


public class Sonata extends Car {
	
	String getName(int num) {
		if (num > 5) {
			return super.getName(num);
		}
		return "나는 자식이다!" + name;
	}

}


보시면 getName 메소드에서 if문이 있죠? num파라미터가 5이상일 경우에는 super.getName(num)을 return 해주는데 이게 바로 부모 메소드를 호출하는 경우입니다.


package exExtends;

public class Ex_extends {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Sonata sona1 = new Sonata();
		
		sona1.name = "빵빵이";
		
		System.out.println(sona1.getName(6));

	}

}



결과를 한번 보시죠. 


파라미터로 6을 넘겨주었기 때문에 자식클래스의 나는 자식이다!가 찍히지 않고 바로 부모클래스의 getName이 호출된 모습이에요.

이런식으로 super를 사용이 가능합니다.


다음으로 부모클래스의 생성자를 사용할때입니다.

일단 자식클래스를 생성할때 부모클래스의 생성자도 무조껀 불러오게 되어있습니다. 따라서 파라미터가 빈 생성자가 없다면 자식클래스에서 super메소드를 이용하여 부모클래스의 생성자를 꼭 불러주어야 합니다.

예제로 확인해보겠습니다.

부모클래스인 Car입니다.

public class Car {
	String name;
	String createName;
	
	public Car(String name){
		this.name = name;
		System.out.println("나는 부모다!");
	}
	
	String getName(int num) {
		return name;
	}
	
	String getCreateName() {
		return createName;
	}
}


자식클래스인 Sonata입니다.

public class Sonata extends Car {
	
	public Sonata () {
		super("소나타");
	}
	
	String getName(int num) {
		if (num > 5) {
			return super.getName(num);
		}
		return "나는 자식이다!" + name;
	}
}


이렇게 작성한 후 결과값을 봐볼까요

자식클래스인 Sonata에서 super("소나타")를 통하여 부모클래스의 생성자에 파라미터를 넘겨주지 않으면 에러가 뜨기때문에 다음과 같이 작성하였습니다.

이렇게 super의 사용방법을 알아보았는데요.



자바에서는 상속이라는 개념이 상당히 중요한 부분이기때문에 꼭 그냥 넘어가는법 없이 꼼꼼히 공부하시길 바랄께요!

728x90
반응형

'프로그래밍 > java' 카테고리의 다른 글

java 제네릭 정리  (0) 2019.05.02
java 캐스팅정리  (0) 2019.04.30
java 컬렉션 ArrayList, HashMap 정리  (0) 2019.04.25
java 예외처리 정리 (try-catch, finally, throws, throw)  (0) 2019.04.24
java static, final 정리  (2) 2019.04.23

댓글