상속
⇒ 자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받음
→ 상속받고자 하는 자식 클래스명 옆에 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에 포함된 함수 이름이 같을 때 (부모와 자식이 중복되는 이름의 함수를 가질 때)
→함수의 실행문을 덮어쓰는 것
•
오버라이딩의 조건
◦
부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는
메소드의 이름, 매개변수, 리턴 값이 모두 같아야함.
예시
메소드 오버로딩
•
자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도
매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의 할 수 있다.
-리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다.
•
오버로딩의 조건
◦
메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
주의할점은 리턴 값만 다른 것은 오버로딩 할 수 없음.
예시
강사님 코드
다형성
•
객체들의 타입이 다르면 똑같은 메세지가 전달되더라도 서로 다른 동작을 하는 것!
다형성의 이해
→ 다형성은 부모 = 자식 이다.
→ 오버라이딩은 자식꺼가 된다.