상속

hyuko·2022년 11월 8일
0

Java

목록 보기
11/26

상속이란?

1.1 상속의 정의

  • 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.

    이렇게 클래스를 작성하게 되면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고, 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.


  • 이러한 점으로 인해 생기는 장점은 :
    코드의 재사용성이 좋아지고 코드의 중복을 제거함으로써 프로그램의 생산성과 유지보수가 좋아지게된다.

상속을 쓰는 구현하는 방법은 아주 간단하다.
밑의 Child라는 클래스는 extends라는 키워드를 통해
Parent 를 상속받는 입장이다.

public class Child extends Parent{
}

위의 코드에서 알 수 있듯이
java의 상속 개념은 부모와 자식간의 상속관계라고
볼 수 있다.

간단하게 정리하자면...
조상 클래스 : 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스 : 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스

상속의 개념으로는...

parent에 age라는 정수형의 변수가 선언되어 있다고 하였을 때
child는 parent 상속 받고 있기 때문에
child에도 age라는 변수를 가지고 있다.

하지만 반대의 경우로 child에 play()라는 메서드를 만들었다 쳤을 때
parent에서 play를 호출해봐야 나오지 않는다.

이 말은 child에 어떠한 코드가 추가 되더라도 parent는 아무런 영향도
받지 않게 된다.

정리를 한번 해보자면

  • 생성자의 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

상속이란 것은
부모가 있고 자식은 여러명이 되더라도 같은 변수 값을
나눠가지게 된다.
child2가나오던 child3이나오던 parent를
상속받는다면 모두 age라는 변수를 받게 된다.

이로써 알 수 있는 것은 만약에 child와 child2를
같이 써야 할 경우 child와 child2가 같은 변수 부분을
가져야 할 경우 parent에 지정을 하고
받아온다면 각각의 클래스의 코드는 매우 깔끔해진다.

그리고 같이 한번에 수정할 코드가 있다고 해도
parent의 코드만 변경을 해주면 되기에 편리하다.

밑에서 상속에 관한 간단한 코드테스트를 보겠습니다

public class Animal {

    private String name;



    public Animal(String name) {
        System.out.println("이름은 " + name + "입니다.");
        this.name = name;
    }
    public void move(){
        System.out.println(name + "이(가) 움직입니다.");
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

human클래스와 tiger클래스를 상속하는 Animal 클래스 입니다.

public class Human extends Animal{

    public Human(String name) {
        super(name);
    }

    /*
     메소드 오버라이딩(오버라이드)
     재정의 한다.
     상위(Animal) 객체에 있는 메소드를 하위(Human) 객체에서 재정의 해서 쓴다
     */
    @Override // 해당 메소드가 상위 객체로 부터 재정의된 메소드입니다를 표기 하는 것
    public void move(){
//        super.move(); 상위 객체에 있는 메소드를 불러온다.
        System.out.println("두 발로 걷습니다.");
    }
}

애니멀 클래스를 상속받은 human클래스

public class Tiger extends Animal{
    public Tiger(String name) {
        super(name);

    }
    @Override// 해당 메소드가 상위 객체로 부터 재정의된 메소드입니다를 표기 하는 것
    public void move(){
        System.out.println("네 발로 뜁니다.");
    }

}

애니멀 클래스를 상속받은 tiger클래스

public class Main {

    public static void main(String[] args) {
//        Animal animal = new Animal();
        Human human = new Human("java");
        Tiger tiger = new Tiger("python");

//        animal.move();
        human.move();
        tiger.move();


    }
}

클래스 검증을 위한 메인 클래스
동물이라는 클래스안에 휴먼과 타이거가 있는 개념으로
둘다 같은 이름이라는 변수를 받고 있다.

그리고 각각 메서드를 가지며 다른 행동을 하고있다.

그 메서드에 사용되는 값들을 재정의해서 쓰기 위해
메서드 오버라이딩 방식을 쓰고
그렇게 하기 위해 get과 set을 이용한다.

profile
백엔드 개발자 준비중

0개의 댓글