👨🏻‍💻

[JAVA]상속

과목
JAVA
태그
상속
StudyDate
2020/12/25

상속이란?

1.
부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인것처럼 사용 할 수 있도록 하는것!
2.
상속은 다형성의 토대가 됨
3.
자바에서 상속은 원칙적으로 단일상속(하나의 클래스만을 부모클래스로 가짐)을 원칙으로한다(그림1-1)
4.
클래스간 상속시 extends키워드를 사용!
그림) 1-1

상속을 왜 쓰는걸까? 이유를 알아야한다!

장점
1.
새로운 클래스를 작성 시 기존에 작성된 클래스의 재사용 가능!
2.
클래스간 계층 관계가 형성되어 다형성문법의 토대가 됨

여기서 잠깐!

상속은 다중상속이 안되고 단일상속만된다. 그렇지만 자식이 있으면 부모가 있고 부모가있으며 조부모가있는 계층관계는 형성된다 !!
단점
1.
부모클래스의 기능 변경시 자식클래스에서 정상적인 동작유무 예측 어려움
2.
자식클래스가 물려받아 사용하는 기능들을 부모클래스에서 변경 시 어려움이 따름
3.
부모클래스부터 물려받은 기능이 자식클래스에서는 무의미할 수 있음

장단점을 고려해볼 때 상속은 언제써야할까?

IS-A 관계로 구분되는 경우에만 사용!

IS - A 관계란???
EX) 삼각형은 도형이다 (TRIANGLE IS A CIRCLE)
1.
이렇게 종속적인관계인 경우에만 사용하는게 바람직하다!

SUPER. 와 SUPER()의 개념

SUPER

1.
부모클래스의 인스턴스 주소를 보관하는 래퍼런스 변수!
2.
자식클래스 내의 모든 생성자와 메소드내에서 부모클래스의 래퍼런스 변수 사용가능

SUPER()

1.
부모생성자를 호출하는 구문
2.
매개변수로 타입,갯수,순서가 일치하는 부모의 생성자를 호출
3.
부모클래스가 가지고는 private 생성자를 제외한 나머지를 생성자를 호출
package com.greedy.section02.superkeyword; import java.util.Date; public class ComputerVO extends ProductVO{ private String cpu; //cpu private int hdd; //hdd private int ram; //ram private String operationSystem; //운영체제 public ComputerVO() { super(); System.out.println("ComputerVO 클래스의 기본생성자 호출함...."); } public ComputerVO(String cpu, int hdd, int ram ,String operationSystem) { super(); this.cpu = cpu; this.hdd = hdd; this.ram = ram; this.operationSystem = operationSystem; System.out.println("ComputerVO 클래스의 모든 필드를 초기화하는 생성자 호출함...."); } public ComputerVO(String code, String brand, String name, int price, Date manufacturingDate, String cpu, int hdd, int ram, String operationSystem) { /*ProductVO의 모든 필드를 초기화하는 생성자 호출하며 값 전달.*/ super(code, brand, name, price, manufacturingDate); // this(cpu,hdd,ram,operationSystem); super()혹은 this() 둘 중 하나만 호출 가능하다. this.cpu = cpu; this.hdd = hdd; this.ram = ram; this.operationSystem = operationSystem; System.out.println("ComputerVO클래스의 부모필드도 초기화하는 생성자 호출됨"); }
Java
복사

오버라이딩이란?

부모클래스에서 상속받는 메소드를 자식클래스에서 다시 재정의하는것
성립조건
1.
메소드 이름동일
2.
메소드 리턴타입 동일
3.
매개변수의 타입,개수,순서가 동일
4.
private 메소드는 오버라이딩 불가능
5.
final 키워드가 사용된 메소드는 오버로딩 불가능
6.
접근제한자는 부모메소드와 같거나 더 넓은 범위여야함
7.
예외처리는 같은 예외이거나 더 구체적(하위)인 예외를 처리해야함

오버라이딩과 오버로딩 비교 표

이름이 비슷하여 헷갈릴수 있으니 표를 참조해서 잘 기억하자!