(자바 객체지향 원리와 스프링 도입의 이해) OOP (3) 상속: 재사용 + 확장

상속은 상속이 아닙니다.

상속은 일반적으로 부모로부터의 상속으로 간주됩니다.

아래 사전적 정의를 보면 가족의 유대를 나타내는 단어임을 알 수 있습니다.


명사

흠… 생각해 보세요. 개체 지향이 상속과 무슨 관련이 있습니까?

네가 옳아. 관련이 없습니다.

객체지향의 4대 특징이 캡슐화, 상속, 추상화, 다형성이라는 말은 무슨 뜻인가요?


잠시만요. 끝까지 들어주세요..!

이것은 영어를 한국어로 번역하여 생긴 오해가 아니라 오해라고 말씀드리고 싶습니다.

객체 지향의 상속은 계층적이지 않습니다. 분류도올바른 것으로 이해


출처: 예스폼

출처 : https://m.blog.naver.com/bluesomedays/120200503482 <动物分类>

분류는 상속 관계가 아닙니다.

즉, 무척추동물은 동물의 자식이 아닙니다.

척추동물은 새의 부모가 될 수 없습니다.

동물은 무척추동물과 척추동물로 나뉩니다.

척추동물은 어류, 양서류, 파충류, 조류, 포유류로 나뉜다.

객체 지향 상속에서 부모 클래스의 속성은 상속되어 자식 클래스에 추가됩니다. 필수 속성 확장즉, 사용할 수 있습니다.

따라서 부모 및 자식 클래스를 작성하는 대신 부모 자식 또는 수퍼클래스-하위클래스좋아요

그나저나, 부모자식 수업을 통해 배웠기 때문에 상속에 대해 조금 오해하고 있었던 점을 인정합니다.

여하튼 이런 것들을 생각해보면 상류층으로 올라갈수록 추상적/일반화되고,

하위 클래스에 들어가면 하위 클래스가 구체화/특화되었음을 알 수 있습니다.

이를 위해 상속관계는 하위 클래스는 상위 클래스입니다. 진술이 만족되어야 합니다.

여전히 이해가 되지 않는다면 다음 코드와 비교해 봅시다.

아버지 영희 = new 딸();
// 딸이 태어났으니 아버지 역할을 하는 영희라 이름 지었다(?)

언뜻 보면 논리적으로 말이 안 된다는 것을 알 수 있습니다.

동물 미키마우스 = new 쥐();
// 쥐가 한마리 태어났으니 동물 역할을 하는 미키마우스라 이름 지었다.

말이 어색하지만 논리적으로는 그리 어색하지 않다.

마지막으로 중요한 것! 자바의 상속 inheritance아니요 extends키워드를 사용하십시오.

Java 작성자보다 Java 객체 지향을 더 잘 이해하는 사람은 없습니다.

상속의 힘

지금하위 클래스는 상위 클래스입니다. 상속과 함께 오는 힘에 대해 말씀드리겠습니다.

public class Animal {
    String name;
    
    Animal() {
    	name = "동물";
    }
    
    void show() {
    	System.out.println(name);
    }
}
public class 포유류 extends Animal {
    포유류() {
    	name = "포유류";
    }
}
public class 조류 extends Animal {
    조류() {
    	name = "조류";
    }
}
public class Dog extends 포유류 {
    Dog() {
    	name = "강아지";
    }
}
public class 참새 extends 조류 {
    참새() {
    	name = "참새";
    }
}
public class Main {
	public static void main(String() args) {
    	Animal animal = new Animal();
        Animal 포유류 = new 포유류();
        Animal 재롱이 = new Dog();
        
        animal.show();
        포유류.show();
        재롱이.show();
    }
}
동물
포유류
강아지

위의 코드를 보면 “서브클래스가 슈퍼클래스”입니다. 확실히 당신에게 깊은 인상을 줄 것입니다.

포유류는 동물이고 개는 동물이라고 말하는 것이 논리적으로 잘못된 것은 없음을 알 수 있습니다.

따라서 객체 지향은 인간의 논리를 그대로 코드로 변환하는 능력을 가지고 있습니다.

그런 다음 정적 (정적 방법) Math 클래스 예에서와 같이 …

상속은 무엇입니까?

모든 클래스의 슈퍼클래스 Object 수업.

Object 클래스는 Java의 클래스 상속 구조에서 최상위 클래스이므로 모든 클래스는 Object 속성을 가질 수 있습니다.따라서 모든 클래스 인스턴스 toString() 즉, 해당 방법을 사용할 수 있습니다!

하위 클래스는 상위 클래스의 한 유형입니다.

객체지향에서 상속관계를 표현하는 말은?

하위 클래스는 상위 클래스입니다.

나는 말했다 서브클래스는 슈퍼클래스 아니요? !

이것이 사실이라면 나는 이 글을 쓰지 않았을 것이다! ?

물론 다 틀린 것은 아니지만 더 적절한 문장들이 있으니 기억해 두시기 바랍니다.

하위 클래스는 일종의 상위 클래스입니다.

Microsoft 개발자 사이트인 MSDN에도 하나로 지정되어 있으므로 그다지 이상한 소리는 아닙니다.

실제 사례를 들어보면 이해가 될 것입니다.

펭귄은 새다 => 펭귄은 새다.

펭귄은 동물이다 => 펭귄은 동물이다.

정리하다

  • 객체 지향 상속은 부모 클래스의 속성을 “재사용”하는 것입니다.
  • 객체 지향 상속은 부모 클래스의 속성을 “확장”하는 것입니다.
  • 객체 지향 상속은 관계를 만족시켜야 합니다.

다음 시간에는 다형성에 대해 살펴보겠습니다.

감사합니다!