songdev
songdev
songdev
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • Web 개발 (6)
    • 리눅스 (5)
    • git (5)
    • Bigdata (8)
      • 하둡 Architecture 번역 (6)
      • Ambari (2)
    • 코테 (22)
      • 프로그래머스 (22)
    • 자격증 (7)
      • 정보처리기사 (5)
      • SQLD (2)
    • 스터디 (18)
      • 웹 프로그래밍 (3)
      • 개념정리 (4)
      • 예제 (6)
      • 바닐라 JS로 크롬 앱 만들기 (5)
    • 일상 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정보처리기사
  • 정렬
  • 자바스크립트
  • charAt()
  • javascript
  • 향상된 버블정렬
  • 정보처리기사 필기
  • github
  • 리눅스
  • sort()
  • github push
  • copyOfRange()
  • SQLD
  • 배열의 복사
  • level1
  • Java
  • 배열
  • 프로그래머스
  • 깃허브
  • parseInt()

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
songdev

songdev

스터디/개념정리

상속의 기본 개념/클래스 상속/java

2020. 2. 15. 14:00
반응형

○ 상속

- 정의 : 새로 설계(생성)하고자 하는 클래스가 이미 설계되어 있는 다른 클래스의 기능과 중복되는 경우, 이미 설계된 클래스의 일부분이나 전체 구조를 공유할 수 있도록 하는 기능을 의미한다.

 

[특징]

- 즉, 상속은 객체를 좀 더 쉽게 만들 수 있는 고수준의 재사용성(reusability)을 확보하고 객체간의 관계를 구성함으로써 객체 지향의 또 다른 큰 특징인 다형성의 문법적 토대가 된다.

- 상속은 기존 프로그램의 클래스 내용을 공유함으로써 중복된 코드들을 재작성할 필요 없이, 반복적이고 세부적인 작업을 처리하지 않기 때문에 프로그램을 작성하는 시간을 절약할 수 있고 유지보수를 편리하게 할 수 있으며, 프로그램의 길이도 짧아지게 된다.

- 또한, 이미 작성된 프로그램들은 앞서 테스트되었기 때문에 오류를 줄일 수 있어 현재 작성중인 프로그램에만 전념할 수 있다.

- [주의] 자바는 다중상속을 지원하지 않기 때문에 두 개 이상의 클래스로부터 상속받을 수 없다.

- 실무에서는 가이드라인을 제시하는 개념으로 많이 쓰인다.

- 상속은 부모가 아닌, 자식에 의해 결정된다. (부모의 의지와 상관 없이 자식이 상속 받겠다 하면 상속 가능)

- 상속 제외 대상 : 생성자, private

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class SuperTest106 {
    protected double area;
 
    // 부모 클래스의 생성자
    SuperTest106() {
        System.out.println("Super Class...");
    }
 
    void write(String title) {
        System.out.println(title + "-" + area);
    }
}
 
// 자식 클래스
// 자바는 단일 상속만 지원되며, 다중 상속은 허용하지 않는다.
public class Test106 extends SuperTest106 { //, SuperTest107, SuperTest108 불가. 다중상속 안됨!
 
    // 사용자 정의 생성자가 없으니 디폴트 생성자가 만들어 졌을거고,
    // 자식클래스 생성자 안에서 상속받은 부모클래스의 생성자를 호출한 것
 
    // 자식 클래스의 생성자
    Test106() {
        // 부모 클래스의 생성자 호출
        // super();
 
        System.out.println("Sub Class...");
        // 항상 예외없이 부모클래스인 "Super Class"가 먼저 실행됨
        // 생성자 안에서 생성자 호출할때는 생성자 내부에서 가장 먼저 실행되어야 함
        // 상속받았으면 자바클래스가 자동으로 부모클래스의 생성자를 가장 먼저 호출해줌
        // super();
        //--==>> 에러 발생(컴파일 에러)
    }
 
    public void circle() {
        int r = 10;
        super.area = r * r * 3.141592;    // 원칙적으로는 super.area라고 써야한다 
        super.write("원");
    }
 
    public void rect() {
        int w = 20, h = 5;
        super.area = w * h;
        super.write("사각형");
    }
 
    public static void main(String[] args) {
 
        // Test106 클래스 기반 인스턴스 생성
        Test106 ob = new Test106();
        //--==>>Super Class...
        //      Sub Class...
 
        ob.circle();
        //--==>> 원-314.1592
 
        ob.rect();
        //--==>> 사각형-100.0
        
    }
}
Colored by Color Scripter
cs

 

- 49번 Line : 자식클래스 기반 인스턴스 생성 -> 자식클래스의 생성자가 호출(22번 Line) -> 자식클래스의 생성자 내부적으로 부모클래스의 생성자가 항상 먼저 호출 됨(24번 Line) -> 5번 Line의 부모 생성자 호출되며 "Super class..." 가 출력된 이후 다시 26번 Line으로 되돌아와 "Sub class..."가 출력된다.

 

- 53번 Line : 자식클래스 객체 ob로 circle()메소드를 호출 -> circle메소드 내에서는 지역변수 r과 상속받은 area를 모두 쓸 수 있음(36번 Line) -> super로 부모클래스의 write()메소드를 호출할 수 있음(37번 Line) -> 인자값으로 "원"을 넘겨주었기 때문에 "원"타이틀로 출력 됨(54번 Line)

 

- 56번 Line : 자식클래스 객체 ob로 rect()메소드를 호출 -> rect메소드 내에서는 지역변수 w, h와 상속받은 area를 모두 쓸 수 있음(42번 Line)  -> super로 부모클래스의 write()메소드를 호출할 수 있음(43번 Line) -> 인자값으로 "사각형"을 넘겨주었기 때문에 "사각형"타이틀로 출력 됨(57번 Line)

 

- 49번에서 객체 생성시, 부모클래스 기반으로 SuperTest106 ob = new SuperTest106(); 이렇게 인스턴스를 생성하였을 경우에는 상속의 개념이 무의미하다. 부모는 누가 자신을 상속했는지 모르기 때문이다.

반응형

'스터디 > 개념정리' 카테고리의 다른 글

다형성이란?/업캐스팅/다운캐스팅/상속/java  (0) 2020.02.15
메소드 오버로딩과 오버라이딩/java  (0) 2020.02.15
배열과 난수/java  (0) 2020.02.11
    '스터디/개념정리' 카테고리의 다른 글
    • 다형성이란?/업캐스팅/다운캐스팅/상속/java
    • 메소드 오버로딩과 오버라이딩/java
    • 배열과 난수/java
    songdev
    songdev

    티스토리툴바