컴퓨터 관련/JAVA 강의

java #13 상속(inheritance), super

승명 2016. 12. 18. 19:27

java #13 상속(inheritance), super

 
* 상속(inheritance)

- 코드의 재사용성 증가 (부모클래스에서 만들어놓은 미리 만들어놓은 method, 변수를 자식클래스에서 사용할 수 있도록 하는 것.
- oop언어의 3대 특징 중 하나
- 클래스의 계층이 생성된다. (부모-자식 관계 / 선조-후손 관계/ super-sub관계)
- java는 단일상속만 지원한다. (단일상속의 장점 : 부모가 누구인지 명확히 알수있고, 클래스의 크기가 필요이상 커지지 않는다.)
- 클래스 정의시 extends 키워드로 부모클래스를 선택할 수 있다.
- 부모클래스 private은 자식클래스에서 사용할 수 없다.
- 부모클래스의 생성자는 상속되지 않는다.
- 부모클래스의 자원은 super로 사용
- 자식클래스를 객체화하면 부모클래스부터 생성된다.
- 부모클래스는 모든 자식 클래스가 가지는 공통 특징을 정의하고, 자식클래스는 자신만의 특징을 정의한다.
- 모든클래스는 Object 클래스를 상속받는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package day0219;
 
/**
* UseSuperMethod 클래스의 부모클래스는 Object 클래스이므로 
* Object가 가지고 있는 모든 메서드를 호출할 수 있다.
* @author SiSt
*/
public class UseSuperMethod { /* extends object */
 
     public static void main(String[] args) {
          UseSuperMethod usm = new UseSuperMethod();
          System.out.println(usm);
          //println 메서드에 객체를 넣어주면 println 메서드 안에서
          // object 클래스의 toString 메서드를 호출하여 heap의 주소를 문자열로 반환.
          System.out.println(usm.toString());
          //toString()메서드는 부모클래스에서만 정의되어있고 자식클래스에서는 자신의 것처럼 사용.
          //코드의 재사용성 : 코드는 한번만 정의하고 모든 클래스에서 사용하게 된다.
     }//main
}//class
cs


* super

- 부모클래스의 자원(변수, 메서드)을 사용하는 키워드
- static 영역에서는 사용할 수 없다.
- 메서드 형식
   . super(); super(값..);
   . 생성자의 첫줄에서만 사용가능.
   . 부모클래스의 생성자를 호출하는 일
   . 모든 클래스의 생성자에는 부모클래스의 기본생성자를 호출하는 super가 숨어있다.
- 키워드 형식 : super.변수명, super.메서드명();
- instance 영역에서만 사용가능
- 부모클래스의 변수명, 메서드명이 자식클래스와 같을 때 자식클래스의 변수/메서드와 구분하여 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package day0220;
 
public class ConstructorSuper {
int i;
public ConstructorSuper(){
    this(10);
    System.out.println("부모 기본");    
}
public ConstructorSuper(int i){
     //this();
    System.out.println("부모 인자"+i);
}
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package day0220;
 
public class ConstructorSub extends ConstructorSuper {
     int i;
     public ConstructorSub(){
          this(10); //모든 자식 클래스 생성자에는 부모 기본생성자 super();가 숨어있다.
          System.out.println("자식 기본");
     }
     public ConstructorSub(int i){
          super();
          System.out.println("자식 인자");         
     } 
}
cs