간단

상속 본문

Java(객체지향)/상속

상속

I want to Sleep 2023. 6. 27. 13:18
728x90

●상속의 사용 이유 

  -유지보수 용이

  - 중복코드 제거

  -통일성

     -> 객체지향의 필수 기능

●개념 

자식 클래스가 부모 클래스를 선택해서 상속 받는 개념

자식 : 하위클래스 or 자식클래스or 서브클래스

부모 : 상위 클래스 or 부모 클래스or 슈퍼 클래스

 

자식클래스가 부모 클래스를 상속받게되면 부모클래스의 필드와 메서드를 물려받게된다(가지게 된다)

   -> 접근제어자에 따라 상속이 불가능한 경우가 있다 (이번장에서는 개념만 알자)

 

●선언 (extends)

   class (자식)클래스명 extends(부모)클래스명 {.....}

    ex)class B(자식) extends  A(부모){,,,}

 

    Class A(부모){

   }

   

   Class B(자식) extends A(부모){

   }

 

 

● 주의

 자바에서는 자식클래스가 여러부모로부터 다중상속을 하는것은 불가능하다 (단일1개만허용)

 하지만 부모 클래스는 여러 개의 자식 클래스에게 상속이 가능하다.

 

ex)Class A(자식) extends B (부모), C(부모) ,D(부모) (x)

     Class A(자식) extendsB(부모) (o)

     Class A(자식) extendsC(부모) (o)

 

● 예제

class People{
    //필드(Feild)
    String name; //이름
    int age; //나이
    
    //부모 메소드
    public void printMyself(){
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
    }
}

class Student extends People{ // People을 상속받음 (선언)
    //필드(Field)
    int korean_scroe; //국어성적
    int height; // 학생의 키
   
    
    //생성자(Constrouct)
    Student(String name, int age, int korean_score, int height ){
        super.name = name; //부모 필드 자식 (클래스에서 부모 클래스를 가리킬 때 사용하는 키워드),extends 키워드를 사용하여 사용 가능
        super.age = age; //부모 필드
        this.korean_scroe = korean_score;
        this.height = height;
      
    }
    
    //자식 메소드
    public void printScore() {
        System.out.println("국어성적 : " + korean_scroe);
        System.out.println("학생의 키 : " + height);
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student("홍길", 20, 100, 175); //People이라는 부모에게 상속받아 자식의 객체를 생성해도 부모의 기능을 사용 할 수 있다.
        student.printMyself(); //부모 메소드 호출  //student.printMyself() 자식객체를 생성해도 부모메서드호출이 가능함 (상속)
        student.printScore(); //자식 메소드 호출   //student 자식객체 그대로 호출
    }
}

 

코드가 길어보이지만 하나씩 본다면 어렵지 않을 것이다

 

1.위에서부터 부모클래스의 필드와 메소드 작성 후에 자식클래스에 부모 클래스를 extends 사용하여 상속

 

2.자식 클래스에 필드와 생성자를 사용하여 super(자식클래스에 부모가 가지고 있는 필드와 메소드에 접근할 때 사용)

 와 자식클래스가 가지고 있는 필드 초기화

 

3.자식클래스의 student라는 객체를 생성해 부모와 자식을 호출

   -> 상속을 하여 부모의 정보를 가지고 있다. (extends 하여 자식클래스의 생성자에서 부모클래스의 필드를 초기화 가능)