반응형

http://www.crocus.co.kr/557 게시물에 상속 내용이 더 상세히 추가되었습니다.


자바에서 클래스 상속이 어떻게 이루어 지나 간단한 코드를 통해 알아보고자 한다.


일단 상속이란 무엇이나면,


상속이란?


- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것

- 두 클래스를 조상과 자손으로 관계를 맺어준다.

- 자손읜 조상의 모든 멤버를 상속받는다. (이때, 생성자는 대상이 아니다.)

- 자손의 멤버개수는 조상보다 적을 수 없다.(즉, 조상의 멤버를 모두 받아오기에 같거나 많다.)


아래 코드를 보자.


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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package JavaBasic;
 
class car{
    
    private String name;
    private int pos;
    
    // 생성자
    public car(String name)
    {
        this.name = name;
        this.pos = 0;
    }
    
    // 함수
    public void move(int val)
    {
        this.pos += val;
        System.out.println(this.name + "  현재위치 :: " + pos);
    }
    
}
 
class sportcar extends car{
    
    public String alias;
    
    // 생성자
    public sportcar(String name)
    {
        super(name);
    }
 
    public void setAlias(String name){
        
        this.alias = name;
        System.out.println("스포츠카의 별명 :: " + this.alias);
    }
}
 
class truck extends car{
 
    public String alias;
    
    // 생성자
    public truck(String name)
    {
        super(name);
    }
    
    public void setAlias(String name){
        
        this.alias = name;
        System.out.println("트럭의 별명 :: " + this.alias);
    }
}
 
public class Jmain{
    
    public static void main(String argv[]) 
    {
        car sportcar = new sportcar("스포츠카");
        truck truck = new truck("트럭");
        
        sportcar.move(4);
        truck.move(3);
        truck.move(3);
        sportcar.move(4);        
    
        //sportcar.setAlias("빠른 자동차");
        truck.setAlias("업무 자동차");
    }
    
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus




이 코드에서 현재 class car을 선언하였고 아래에는 class sportcar extends car class truck extends car를 선언하였는데 모두 뒤에 extends car이 적혀있다.


이것이 상속을 하기위해 필요한 코드이고 car의 멤버를 모두 이용하겠다라는 의미를 가진다.


이렇게 현재 sportcar, truck는 상속을 받은 상태이고,


main함수에서 

1. car sportcar = new sportcar("스포츠카");

2. truck truck = new truck("트럭"); 를 해보자.


1번의 의미는 car 객체인 객체명 sportcar를 만드는데, sportcar의 객체로 생성한 것을 의미하고

2번의 의미는 truck 객체의 객체명 truck를 만드는데, tuck의 객체로 생성한 것을 의미한다.


즉, 1번은 class car 안에서만 행동할 수 있고, 2번은 class car, class truck 두군데에서 행동 할 수 있게된다.


그리고 생성자를 이용하면 모두 super(~);을 통해 부모 생성자로 넘어가 코드를 수행하게된다.



첫번째 결과화면은 

 //sportcar.setAlias("빠른 자동차");

이렇게 주석처리를 해 둔상태이다.





두번째 결과화면은, 주석을 해제했을때의 상태인데 


아래 에러가 무엇을 의미하냐면, 


sportcar은 car클래스에서만 놀수있는데 왜 sportcar 클래스에 접근하려하냐? 그럴수 없다. 이런 의미이다.


 

반응형