Minwoo Dev.

[Java] 상속(inheritance) 본문

Java

[Java] 상속(inheritance)

itisminu 2024. 5. 10. 17:35
728x90
반응형
SMALL

상속(inheritance)

클래스의 멤버변수와 메서드를 그대로 물려받는 것을 상속이라 한다.

출처 - Java] 상속https://www.google.com/url?sa=i&url=https%3A%2F%2Fdev-gorany.tistory.com%2F147&psig=AOvVaw1rGK2XVds9SpA8nenCJuOe&ust=1715415301941000&source=images&cd=vfe&opi=89978449&ved=0CBQQjhxqFwoTCIi2wZDSgoYDFQAAAAAdAAAAABAJ

 

  • 물려주는 클래스가 부모 클래스, 물려받는 클래스는 자식 클래스이다.
  • 자식 클래스는 부모 클래스로부터 상속받아 추가적으로 멤버변수와 메서드를 작성할 수 있다.
  • 중복된 코드를 줄이고, 유지보수에 용이하다.

상속은 extends 키워드를 사용한다.

public class test{

    public static void main(String[] args) {
    }

}

 class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{// A 클래스를 상속받음
}

 

위 코드를 보면 A라는 클래스를 B라는 클래스가 extends 키워드를 통해 상속받고 있다.

 

B 클래스로 객체를 생성하면, A 클래스에 존재하는 변수와 메서드를 사용할 수 있다.

정확히는, B 객체가 생성될 때 A 클래스와 똑같은 부분도 같이 생성되는 것이다.

 

public class test{

    public static void main(String[] args) {
        B b = new B();
        b.SayHi(); 
    }

}

 class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{
}

 

B 클래스를 통해 생성한 객체 b를 통해 A 클래스의 메서드인 SayHi()를 호출할 수 있다.

 


public class test{

    public static void main(String[] args) {
        B b = new B();
        b.SayHi();
        b.SayBye();
    }

}

class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{
    public void SayBye(){ // SayBye 추가
        System.out.println("BYE!!!");
    }
}

 

 

B 클래스에 메서드를 추가하여 메서드를 실행할 수도 있다.

 

 

이처럼 상속을 하게되면 부모 클래스의 내용을 자식클래스가 모두 가지고 있다.

즉, private 접근지정자를 제외한 모든 변수와 메서드가 자식 클래스에 그대로 상속되는 것이다.

 

 

 

하나의 클래스에 모든 코드를 구현하기보다 하나의 추상적인 클래스를 생성하고, 좀 더 구체적인 클래스를 추상적인 클래스를 상속받아 추가적인 기능을 구현하는 것이 상속의 주된 사용이다.

 

 

 

번외) 상속의 사용 예

 

public class test{

    public static void main(String[] args) {
        Animal animal = new Animal(4,70);
        animal.showInfo();
        Cat cat = new Cat(4,50,"red");
        cat.showInfo();
    }

}


class Animal{
    private int leg;
    private int height;
    public Animal(){}
    public Animal(int leg, int height){
        this.leg = leg;
        this.height = height;
    }
    void showInfo(){
        System.out.println("age : "+leg+", height : "+height);
    }
}

class Cat extends Animal{
    private String eyeColor;
    public Cat(){}
    public Cat(int leg, int height, String color){
        super(leg,height);
        this.eyeColor = color;
    }
    void meow(){
        System.out.println("meow");
    }

    @Override
    void showInfo() {
        super.showInfo();
        System.out.println("eyecolor : "+this.eyeColor);
        this.meow();
    }
}

 

예를 들어, 위처럼 동물의 특징을 상속하여 고양이를 나타내는 Cat 클래스를 만들 수 있다.

중복되는 기능은 부모 클래스에 작성하고, 고양이에 해당하는 특징들만 Cat 클래스 내부에 작성한다.

 

부모 클래스에서 상속받은 내용 중 수정하여 사용할 메서드는 메서드 오버라이딩(method overriding)을 사용하여 수정한다.

 

첫번째 줄이 animal 객체를 통해 호출한 값이고, 2번째 줄부터 4번째 줄이 Animal 클래스를 상속하여 작성한 Cat 클래스의 객체를 사용하여 호출한 값이다.

 

 

 

728x90
반응형
LIST