///////
Search

20220926

작성 날짜
2022/09/26 07:13
작성자
박태근

상속

⇒ 자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받음
→ 상속받고자 하는 자식 클래스명 옆에 extends 키워드와 상속할 부모 클래스 명을 적음.
→이 때, 다중 상속을 허용하지 않으므로, extends뒤에는 하나의 부모 클래스만 와야함.
수퍼클래스 (상위 클래스)
서브클래스 (하위 클래스)
public class SportsCarTest { public static void main(String[] args) { SportsCar obj = new SportsCar(); obj.speed = 10; //재사용의 의미 SportsCar 객체를 만들었지만 obj.setSpeed(60); // Car에 있는 변수를 사용할수 있음. obj.setTurbo(true); } }
Java
복사

부모 생성자의 호출 : super();

부모 클래스의 생성자 선언은, 자식 클래스의 생성자 선언 내부 맨 첫줄에 super(); 라고 생성됨.
→ 부모의 기본 생성자 선언을 포함해서 명시적 생성자 선언이 없었으므로, 컴파일러가 super()을 알아서 생성
만약 부모에게 기본생성자가 없고, 매개 변수가 있는 명시적 생성자만 있다면?
자식 클래스에서 반드시 생성자 내부 첫줄에 super(매개값, 매개값, …) 로 선언해주어야함! 왜냐; 컴파일러는 기본 생성자만 담당해주기 때문.

주의사항

1.
부모 크래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없음.
2.
부모와 자식 클래스가 서로 다른 패키지에 있다면 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.

상속을 사용 하는 이유

상속을 사용하면 중복되는 코드를 줄일 수 있다.
상속받아서 이미 존재하는 클래스의 필드와 메소드를 재사용 할 수 있다.
예제

메소드 오버라이딩과, 오버로딩

메소드 오버라이딩

상위 클래스의 메서드를 하위 클래스가 재정의 하는 것
Shape와 Rectdangle에 포함된 함수 이름이 같을 때 (부모와 자식이 중복되는 이름의 함수를 가질 때)
→함수의 실행문을 덮어쓰는 것
오버라이딩의 조건
부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야함.
예시

메소드 오버로딩

자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의 할 수 있다. -리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다.
오버로딩의 조건
메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
주의할점은 리턴 값만 다른 것은 오버로딩 할 수 없음.
예시
강사님 코드

다형성

객체들의 타입이 다르면 똑같은 메세지가 전달되더라도 서로 다른 동작을 하는 것!

다형성의 이해

→ 다형성은 부모 = 자식 이다.
→ 오버라이딩은 자식꺼가 된다.