*JAVA*

[java] 상속(inheritance)

깐부로부터 2021. 10. 27. 18:27

매 클래스마다 중복된 필드, 메소드들을 단 한번 또 하나의 클래스(부모클래스)로 정의해둔 후

해당 클래스의 내용을 가져다 쓰는 개념

★기존의 클래스를 이용해서 새로운 클래스를 만든다!★

 

상속관계의 클래스 명칭

 

상속의 [표현법]

SmartPhone 클래스는 Product를 상속한다.

 

 

상속의 특징
 - 클래스간의 다중상속이 불가능하다.(단일 상속만 가능)

   Why? 부모가 여럿이면 똑같은 이름의 메소드가 여러부모에게 있을경우,

           둘 중 어떤 메소드를 상속받아야 할지 몰라서 충돌이 발생하기때문
- 명시되어 있지는 않지만 모든 클래스는 'Object'클래스의 후손이다.
  (모든 클래스 : 내가 만든 클래스들, 자바에서 이미 제공하고 있는 클래스)
=> Object클래스에 있는 메소드를 호출해서 쓸 수 있음.
=> Object클래스에 있는 메소드가 마음에 안들면?? 오버라이딩을 통해 재정의가 가능!

 

번외) Object 클래스 - 모든 클래스의 최상위 조상

- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.

  (모든 클래스명 옆에 'extends Object'가 항시 생략되어있음.)

- 모든 클래스는 Object클래스에 정의된 11개의 메소드를 상속 받는다.

  toString(), equals(Object obj), hashCode(),........

 


상속의 장점
- 중복된 코드를 공통적으로 관리 => 새로운 코드를 작성하거나 수정할 때 용이하다.
   => 보다 적은양의 코드를 새로운 클래스를 만들 수 있다.
- 프로그램의 생산성가독성유지보수에 크게 기여!


부모클래스 Product

 

Product를 상속하는 자식클래스 SmartPhone

super( ) - 조상의 생성자

조상의 생성자를 호출할때 사용

조상의 멤버는 조상의 생성자를 호출해서 초기화한다.

위에 SmartPhone클래스는 자기자신의 개체를 초기화하기전에 super(brand, pCode, pName, price) 즉, 조상의

생성자를 호출해서 매개변수를 대입해줬다.

 

※ 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.

  그렇지 않으면 JVM이 생성자의 첫 줄에 super();를 자동으로 삽입해준다.

 

 

 

Product를 상속하는 Tv클래스

super. - 조상을 가리키는 참조변수

객체 자신을 가리키는 참조변수, 인스턴스 메소드(생성자)내에서만 존재한다.

조상의 멤버를 자신의 멤버와 구별할 때 사용.

자기자신 객체를 가리키는 this. 와 마찬가지로 static메소드내에서 사용불가

 

'*JAVA*' 카테고리의 다른 글

[java] 다형성  (0) 2021.10.27
[java] 오버라이딩(overriding)  (0) 2021.10.27
[java] 객체배열  (0) 2021.10.26
[java] 오버로딩(overloading)  (0) 2021.10.26
[java] 객체 - 메소드(method)  (0) 2021.10.26