반응형

클래스에서 상속이란 ?

 

- 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다.

- 형태는 다음과 같습니다.

 

class 부모클래스:
	소스코드
    
class 자식클래스(부모클래스):
	소스코드

 

class Animal: # 부모클래스
    def __init__(self):
        print('animal 생성자')
        
    def move(self):
        print('움직이는 동물')
        
class Dog(Animal):  # 자식클래스
    def __init__(self): # 해당 클래스의 생성자가 없으면 부모 생성자를 부르고 생성자가 있으면 자신을 호출한다.
        print('Dog 생성자')
    
    def my(self):
        print('나는 개')

dog1 = Dog()

dog1.my()
dog1.move()


출력 결과

Dog 생성자
나는 개
움직이는 동물

 

부모클래스 Aninal의 '움직이는 동물'을 자식클래스 Dog가 가져다가 사용하여 위와 같은 출력 결과를 가지고 온 것을 알 수 있습니다.

 

여기서 부모클래스의 생성자를 가지고 오지 않는 이유는 주석에도 알 수 있듯이, 자식클래스에서 생성자가 있기 때문입니다.

 

 

오버라이딩 

 

-  부모 클래스의 메소드를 자식 클래스에서 재정의 하는 것입니다.

 

다형성

 

- 부모 클래스로부터 물려받은 내용을 자식 클래스 내에서 오버라이딩하여 사용하는 것입니다.

 

class Parent: # overriding
    def Prindata(self):
        pass
    
class Child1(Parent):
    def Prindata(self):
        print('Child1에서 overrding')
            
            
class Child2(Parent):
    def Prindata(self):
        print('Child2에서 재정의')
        
    def abc(self):
        print('Child2 고유 메소드')
        
c1 = Child1()
c1.Prindata()

c2 = Child2()
c2.Prindata()   


출력 결과


Child1에서 overrding
Child2에서 재정의

 

부모클래스인 Child1 에서 Printdata 메소드는 'child1에서 overrding'을 출력해준다.

하지만 오버라이딩 성질을 이용하면 Child2에서 Printdata 메소드의 출력문인 'Child2에서 재정의' 를 출력해줍니다.

 

 

2020/05/10 - [python] - python - 상속 (2)

 

python - 상속 (2)

이전 포스팅 글에 의어서 상속 예제를 들어보겠습니다. class Person: say = '안녕하세요 제 나이는 ' nai = 20 def __init__(self, nai): print('Persion 생성자') self.nai = nai def PrintInfo(self): print('..

lightchan.tistory.com

 

반응형

'python' 카테고리의 다른 글

python - OS & pickle  (0) 2020.05.11
python - 상속 (2)  (0) 2020.05.10
python - 클래스  (0) 2020.05.10
python - 재귀함수  (0) 2020.05.10
python - 함수 장식자 ( Decorator )  (0) 2020.05.10
반응형

상속이란 ?

 

자식 클래스는 부모 클래스에서 정의된 변수나 메소드를 자기 자신 것처럼 사용할 수 있다.

 

상속 형태

class 부모클래스명 {

        변수;

        메소드;

}

 

clasee 자식클래스명 extends 부모클래스명 {

        실행할 문장; 

}

 

오버라이딩

- 부모로부터 상속받은 메소드를 자식 클래스에서 자기 자신 클래스의 기능에 맞도록 재정의하는 기능

 

바로 예시로 들어가보겠습니다

동일 패키지에 존재한다는 가정하에 클래스 파일을 분리해서 만들었습니다.

 

부모클래스

GrandF.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class GrandF {
 
    public String name = "홍길동할아버지";
    protected String gahun = "열심히하자";
 
    public GrandF() {
        System.out.println("할아버지 생성자입니다");
    }
 
    public void say() {
        System.out.println("할아버지가 말씀하셨다.");
    }
 
}
 
 

3-4번 줄 : name과 gahun이라는 변수명과 변수 값을 정해줍니다.

6-7번 줄 : 생성자를 한번 더 복습해보았습니다.

10-11번 줄 : say라는 메소드를 생성해주었습니다.

 

자식클래스

gajok.java

 

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
public class Fatherr extends GrandF {
 
    public String gabo = "지역변수"// 은닉화
 
    public Fatherr() {
        super(); // 부모 생성자 호출. 아규먼트에의해 선택적으로 호출
     
    }
 
    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("자바 공부를 합시다");
    }
 
    public void showData() {
 
        String gabo = "멤버변수";
 
        System.out.println("gabo : " + gabo); // 멤버변수
        System.out.println("gabo : " + this.gabo); // 지역변수
        System.out.println("gabo : " + super.name);
 
    }
 
    public static void main(String[] args) {
        Fatherr fa1 = new Fatherr();
        fa1.say();
        fa1.showData();
 
    }
 
}
 
 

5번 줄 : GrandF 클래스를 gr이라는 새로운 객체로 생성해준다.

6번 줄 : super()는 부모 클래스의 생성자를 호출하기때문에 "할아버지 생성자"를 호출합니다.

10번 줄 : 기존  부모클래스에서 "할아버지가 말씀하셨다"를 호출해야하지만 자식클래스에서 상속을 받았기 때문에 "자바 공부를 합시다"가 출력됩니다.

16번 줄 : 변수별로 어떤 차이점을 가지는지 보여주기위해 작성하였습니다.

28번 줄 : 오버라이딩한 내용을 출력합니다.

 

 

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

8 - 생성자(Constructor)  (0) 2020.03.04
7 - 메소드  (0) 2020.03.04
6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03

+ Recent posts