티스토리 뷰
자바에서 상속이란 ? 기존 클래스를 재활용하여 새로운 클래스를 작성하기 위한 문법입니다
단, 재활용할 수 있다는 이유만으로 상속을 사용하면 안됩니다.
상속관계에 있어서 상속을 받은 클래스를 하위클래스 (자식클래스)
상속의 대상이 된 클래스를 상위클래스 (부모클래스) 라고 합니다.
실습을 통해 사용법에 대해 알아보겠습니다.
먼저 상복을 받은 자식클래스 입니다.
// 자식 클래스 // 상속 키워드 : extends // 확장이라는 의미를 가지고 있고, 상속의 개념(중복된 기능들을 상속시켜준다.) 라고 보다는 // 기초 클래스를 기반으로 한 확장 클래스를 만든다 라고 생각 해야한다. // 따라서 Child 클래스는 Parent 클래스를 확장시켜 만든 클래스다 라고 생각하는 것이 좋다. public class Child extends Parent{ public Child(){ System.out.println("Child() 생성자 호출"); } public void goo(){ foo(); System.out.println("Child.goo()"); } }
상속의 대상이 된 부모클래스입니다.
// 부모 클래스 public class Parent { public Parent(){ System.out.println("Parent() 생성자 호출"); } public void foo(){ System.out.println("Parent.foo()"); } }
부모클래스와 자식클래스를 사용하는 메인클래스입니다.
public class ExampleExtends{ public static void main(String[] args) { // 1) 부모의 생성자부터 호출한다. (부모 객체를 제일 먼저 생성) // 2) 자식의 생성자를 호출한다. (부모 객체가 만들어 진 다음 그 객체를 포함하는 형태로 자식객체가 만들어진다.) Child child = new Child(); // new Child() 시 발생하는 메모리 주소값 : Child 객체의 주소값 child.foo(); // 부모에 정의된 foo() 함수 child.goo(); // 자식에 정의된 goo() 함수 Parent parent = new Parent();// 부모의 생성자만 호출 parent.foo(); // 부모가 가지고 있는 foo() 호출가능 // parent.goo(); // Error! 자식이 가지고 있는 goo() 호출 불가능 } }
자식클래스는 부모클래스의 객체 생성에 대해 책임을 져야한다.
즉, 부모클래스 객체를 생성함에 있어서 걸림돌이 되는 것을 자식클래스가 해결해 주어야 한다.
아래 실습을 보면 부모클래스는 생성자를 가지며, 멤버변수를 초기화하고 있다.
그러나 메인클래스에서 부모객체를 생성하지 않고 바로 자식객체를 생성한다.
이에 따라 부모객체가 생성을 책임지기 위해
상위 클래스의 생성자 호출 super() 키워드를 사용한다.
super() 키워드란 ? 상위 클래스의 생성자 호출이라고 본다.
이제 실습을 통해 super() 키워드의 사용법에 대해 알아보겠습니다.
먼저 상복을 받은 자식클래스2 입니다.
public class Child2 extends Parent2 { // 자식클래스는 부모클래스의 객체 생성에 대해 책임을 져야 한다. // 자식클래스의 생성자에서 부모클래스의 생성자에 대한 책임을 지낟. (명시적으로 부모의 생성자를 호출하여 객체를 만든다.) private int num3; private int num4; public Child2(int num1, int num2, int num3, int num4) { // System.out.println("객체만들기"); // Error! // 자식클래스는 부모클래스부터 만들어야한다. 그러나 이 상황은 부모클래스 만들기 이전에 행동을 하기 때문에 Error다. // super 클래스는 자식클래스의 생성자에서 맨 위에 있어야 한다. super(num1, num2); // 부모클래스 객체를 만들기 위한 매개변수 전달 // 자식클래서에서 부모클래스를 만들기 위한 매개변수를 모두 받는다. this.num3 = num3; this.num4 = num4; } public void showChildInfo() { System.out.println("num3 : " + this.num3); System.out.println("num4 : " + this.num4); } }
상속의 대상이 된 부모클래스2 입니다.
public class Parent2 { // 상속을 위한 protected 키워드 // 다른 패키지 X // 다른 패키지의 자식 O // 같은 패키지 O protected int num1; protected int num2; public Parent2(int num1, int num2) { this.num1 = num1; this.num2 = num2; System.out.println("Parent2() 생성자 호출"); } public void showParentInfo() { System.out.println("num1 : " + this.num1); System.out.println("num2 : " + this.num2); } }
부모클래스와 자식클래스를 사용하는 메인클래스입니다.
public class ExampleExtends2{ public static void main(String[] args) { Child2 child2 = new Child2(10,20,30,40); child2.showChildInfo(); child2.showParentInfo(); } }
반응형
LIST
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 오버라이딩, 추상클래스 (overriding, abstract) (1) | 2017.04.26 |
---|---|
자바 ! 생성자 오버로딩과 this 키워드 (0) | 2017.04.25 |
자바 ! 메소드 오버로딩 (1) | 2017.04.23 |
자바 ! 생성자 (0) | 2017.04.22 |
자바 ! static 변수와 메소드 (정적변수, 메소드) (0) | 2017.04.22 |
댓글