이미 개발된 클래스를 재활용하여 중복 코드 줄일 수 있음
동일한 메소드를 추가작성 하지 않아도 되고 부모 클래스 수정 시 자식 클래스도 같이 수정 가능하기에 개발 시간 및 유지 보수 시간 절약 가능함
class 자식클래스 extends 부모클래스 {}
자식클래스 선언 시 extends
로 어떤 부모클래스를 상속 받을지 결정 해야 함
extends
뒤에는 단 하나의 부모 클래스만 올 수 있음private 접근 제한
인 필드, 메소드는 상속 대상에서 제외default 접근 제한
인 필드와 메소드도 상속 대상 X부모 클래스인 CellPhone
선언
자식 클래스인 DmbCellPhone
선언.
선언 시 extends CellPhone
으로 상속 받을 클래스 지정
자식 클래스로 객체 생성하여 프로그램 작성
모든 객체는 클래스의 생성자를 호출해야 생성됨
부모 생성자는 자식 생성자에서 호출됨 반드시 자식 생성자 첫 줄에!
부모 클래스에서 생성자 선언이 되지 않아도 컴파일러가 기본 생성자를 생성되어 실행 됨. (명시적으로 부모 생성자 호출을 원한다면 해도 됨)
부모 클래스에 매개 변수가 있는 생성자가 있다면 자식 클래스에서 호출 해야 함
super(매개값, ...);
을 자식 생성자 첫 줄에 작성하면 부모 생성자 호출 가능
부모클래스인 People 클래스 선언
자식클래스인 Student 클래스 선언
super()
를 이용해 부모 생성자를 호출 해야함.자식 객체 이용
자식 클래스에 사용하기 적합하지 않은 부모 메소드가 상속 되었을 때 자식 클래스에서 다시 수정하는 기능. 즉, 자식 클래스에서 부모 클래스의 메소드를 다시 정의하는 것.
메소드 재정의 규칙
원면적 계산하는 코드 작성
부모 클래스인 Calculator 클래스 선언
자식 클래스인 Computer 클래스 선언
Math.PI
상수로 메소드 재정의@Override
어노테이션: 컴파일러가 정확히 메소드 재정의 되었는지 확인할 수 있음. (개발자 실수를 줄이기 위함)메소드 재정의 테스트를 위한 실행 코드
부모클래스, 자식클래스 모두 객체 생성하여 메소드 재정의가 잘 되었는지 확인
메소드 재정의 시 부모 메소드는 숨겨지고 재정의된 자식 메소드만 사용됨. 부모 메소드가 필요한 상황에는 super
키워드를 사용해 부모 메소드 호출 가능
부모 클래스 Airplane 클래스 선언
자식 클래스인 SupersonicAirplane 클래스 선언
자식 객체 이용
final 키워드는 해당 선언이 최종 상태이니 수정할 수 없음을 뜻함.
클래스 선언 시 final 키워드 사용
public final class 클래스 {...}
final 클래스는 부모 클래스가 될 수 없으며, 자식 클래스를 만들 수 없다.
final 클래스를 상속할 경우 자식 클래스를 선언할 수 없음
메소드 선언 시 final 키워드 사용
public final 리턴타입 메소드([매개변수, ...]) {...}
부모 클래스 상속해서 자식 클래스 선언할 시 final 메소드는 재정의할 수 없음.
speedUp() 메소드는 재정의 되었지만 stop()메소드는 final 메소드이기에 재정의 시 컴파일 에러 발생
같은 패키지에서 접근 제한없고 다른 패키지에서는 자식 클래스만 접근 가능함. 또한, 필드와 생성자, 메소드 선언 시 사용 가능함.
new 연산자
가 아닌 super()
로 A생성자 호출