부모역할을 하는 클래스가 자식 역할을 하는 클래스에게
클래스 멤버와 메서드를 물려주는 것을 상속이라함.
상속은 클래스를 재사용하기 때문에 중복을 줄여주고, 수정을 최소화 함.
상속의 이유
1. 중복 코드 제거
2. 재사용 가능
3. 코드가 간결
4. 생산성 증가
상속 선언
class A { //부모클래스에서 지명 받기 전에는 부모 클래스 역할 X
.....
}
class B extends A { // B클래스에서 extends A를 작성함으로
// A는 부모 클래스, B는 A의 자식 클래스
....
}
실습)
public class Book {
String title;
int price;
public void info() {
System.out.println("책의 제목은" + this.title + "이고 가격은 " + this.price + "원 입니다.");
}
}
public class ComicBook extends Book {
public ComicBook(String title, int price) {
this.title = title;
this.price = price;
}
}
BookStore
public class BookStore {
public static void main (String[] args) {
ComicBook comic = new ComicBook("내친구뽀로로", 15000);
comic.info();
}
}
결과)
책의 제목은 내친구뽀로로이고 가격은 15000원 입니다.
부모 생성자가 수동으로 선언 되어야 할 때
-> 부모 클래스의 생성자가 기본생성자(파라메터 X)가 아닐때
ex)
Book2
public class Book2 {
String title;
int price;
public Book2(String title, int price) {
this.title = title;
this.price = price;
}
public void info() {
System.out.println("책의 제목은" + this.title + "이고 가격은 " + this.price + "원 입니다.");
}
}
Novel
public class Novel extends Book2 {
public Novel(String title, int price) {
//부모클래스의 생성자가 파라메터(매개변수)가없는 기본생성자가 아닐경우,
//생성자를 만들 수 없기 때문에 개발자가 직접 호출 해줘야한다.
super(title,price); //부모의 생성자를 호출
}
}
상속 관계에서 상위 클래스가 상속해준 메서드의 내용을 다시 정의하여
메서드를 구현하는 기술
실습)
public class Computer {
public void powerOn() {
System.out.println("컴퓨터 전원이 켜집니다.");
}
public void powerOff() {
System.out.println("컴퓨터 전원이 꺼집니다.");
}
}
SamSung
public void powerOn() {
super.powerOn();
System.out.println(" 헬로우!! 삼성 ");
System.out.println(" 컴퓨터가 실행됩니다.");
}
public void powerOff() {
super.powerOff();
System.out.println(" 굿바이!! 삼성 ");
System.out.println(" 컴퓨터가 종료됩니다.");
}
}
CompWorld
public class CompWorld {
public static void main(String[] args) {
SamSung comp = new SamSung();
comp.powerOn();
comp.powerOff();
}
}
결과)
헬로우!! 삼성!!
컴퓨터가 실행됩니다.
굿바이!! 삼성!!
컴퓨터가 종료됩니다.
public :제한없이 모둔 패키지, 모든 클래스에 접근 가능
protected : 같은 패키지 안에서 접근 가능, 다른 패키지라도 자식클래스라면 접근 가능
default : 같은 패키지 내에서만 접근 가능
private: 같은 클래스 내에서만 접근 가능
final
변수 + final
1. 선언한 후 값 변경 X
2. 선언시 초기 값을 반드시 부여
메서드 + final
: 오버라이드 사용 불가
객체 + (class) + final
: 상속 불가( 부모 클래스 될 수 없음)