본문 바로가기
Java/Java 기초문법

[JAVA 기초] 자바 클래스 - 상속(Extends)

by dev수니 2021. 3. 11.
반응형

 

 1  상속

 

 

상속이란 새로운 클래스를 작성할 때 기존에 존재하는 클래스를 물려받아 이용한다. 기존의 클래스가 가진 멤버를 물려받기 때문에 새롭게 작성해야 할 코드의 양이 줄어드는 효과가 있다. 이때 자신의 멤버를 물려주는 클래스를 부모클래스 또는 조상 클래스라고하고 상속받는 클래스를 자식 클래스 또는 자손 클래스라고 한다.

 

 

부모 클래스와 자식 클래스의 관계를 상위(super) 클래스와 하위(sub) 클래스라고 표현하기도 한다. 또한 기초 클래스(base class), 유도 클래스(derived class)라고도 부른다. 

 

 

상속할 때는 새롭게 작성할 클래스 선언 부분 뒤에 'extends 부모클래스이름' 을 붙인다.

 

class Parents{}
class Child extends Parents{}
// Parents 클래스의 멤버들을 상속받음

 

 

상속을 사용하는 이유는 코드를 재사용하고 코드의 중복을 줄이기 위해서이다. 다만 상속을 할 때 생성자는 상속되지 않는다. 또 주의할 것은 자바에서는 단일 상속만 허용한다는 것이다. 다른 객체자향언어에서는 여러 클래스로부터 상속받을 수 있지만 자바에서는 다중상속을 허용하지 않는다.

 

class Parent1 { }
class Parent2 { }
class Child extends Parent1,Parent2 { }
// 자바에서 다중상속 안됨!

 

 

자바에서 상속이 가능하지 않은 경우가 있는데 클래스 앞에 final이 붙은 경우에 상속이 불가능하다.

 

fainal class Parents{}
class Child extends Parents{}  // 에러발생!

 

 

또한 부모 클래스로부터 상속받은 자식클래스A를 부모클래스로하여 상속이 가능하다.

 

class Parents{}  // 부모
class Child1 extends Parents{}  // 자식
class Child2 extends Child1{}   // 자식의 자식

// Parents 클래스의 멤버들을 상속받은 자식클래스 Child1
// Child1을 상속받은 자손클래스 Child2

 

 

 

 

 

 2  Object 클래스

 

 

모든 클래스의 조상인 클래스이다. 어떤 클래스라도 상속관계를 따라 거슬러 올라가면 마지막에는 Object 클래스가 있다.

 

 

따라서 모든 클래스는 자동으로 Object 클래스를 상속하기 때문에 Object 클래스 내부에 정의된 멤버들을 사용할 수 있다. 

ex) toSting(), equals(), ...

 

ex)
class Person { } --> (extends Object)가 생략되어 있음
class Student extends Person { }
class Teacher extends Person { }

 

 


 

 

Ex 상속 예제 1.

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
package java_practice;
 
class Person {    // 부모 클래스
    void breath() { System.out.println("숨쉬다."); }
    void eat() { System.out.println("먹는다."); }
    void say() { System.out.println("말한다."); }
}
class Student extends Person {    // 부모 클래스 Person으로 부터 상속받은 자식클래스.
    void learn() { System.out.println("배운다."); }
}
class Teacher extends Student {    // 부모 클래스 Person으로 부터 상속받은 Student으로 부터 상속받은 자손클래스.
    void teach() { System.out.println("가르친다."); }
}
 
public class Extends {
    public static void main(String[] args) {
        Student s1 = new Student();
        Teacher t1 = new Teacher();
        s1.breath();
        s1.eat();
        s1.say();
        s1.learn();
        
        System.out.println();  // 줄바꿈.
 
       t1.breath();
        t1.eat();
        t1.say();
        t1.learn();
        t1.teach();
    }
}
cs

결과

숨쉬다.
먹는다.
말한다.
배운다.

숨쉬다.
먹는다.
말한다.
배운다.
가르친다.

 

 

 

 

반응형

댓글