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

상속은 상속이 아닙니다.

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

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


명사
  • 2.

    긍정하다 혈연 관계 관계 가지다 사람들 ~ 사이, 하나 사람들 고인 ~ 후에 다른 사람들에게 재산 ~에 대한 직면 의무 모든 것 다음과 같은 주거나, 다른 사람들 고인 사람에게서 저것 직면 의무 모든 것 인계하다 하늘.

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

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

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


OOP상속: 재사용 + 확장 관련 대표 이미지
잠시만요. 끝까지 들어주세요..!

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

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


OOP상속: 재사용 + 확장 관련 이미지
출처: 예스폼

OOP상속: 재사용 + 확장 관련 이미지
출처 : 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에도 하나로 지정되어 있으므로 그다지 이상한 소리는 아닙니다.

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

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

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

정리하다

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

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

감사합니다!