상속 (Inherit)
상속
- 기존 클래스를 재사용하여 새로운 클래스 작성
- 상속을 하는 클래스 : 슈퍼 클래스(super class, 부모 클래스)
- 상속을 받는 클래스 : 서브 클래스(sub class, 자식 클래스)
- 서브 클래스는 슈퍼 클래스의 모든 멤버(필드와 메소드)를 상속받는다 (생성자는 상속되지 않는다)
- 서브 클래스는 슈퍼 클래스보다 멤버의 갯수가 항상 크거나 같다 (서브 클래스 멤버 수 >= 슈퍼 클래스 멤버 수)
- 서브 클래스는 단 하나의 슈퍼 클래스만 가질 수 있다 (다중 상속은 허용하지 않는다)
- 클래스의 상속은 클래스를 확장한다는 의미의 키워드인 extends로 구현한다
상속의 예시
Phone 클래스 (슈퍼 클래스)
public class Phone {
// 슈퍼 클래스의 멤버
private String number;
private String color;
// 슈퍼 클래스의 메소드
public void call() {
System.out.println("통화 기능");
}
public void camera() {
System.out.println("카메라 기능");
}
}
IPhone13 클래스 (서브 클래스)
public class IPhone13 extends Phone {
// 멤버 필드
private String owner;
// 메소드
public faceid() {
System.out.println("페이스아이디 기능");
}
}
- Phone 클래스를 상속(extends Phone) 받았으므로
IPhone13 클래스는 기본적으로 상속받은 String number, String color 필드와 call(), camera() 메소드를 가지게 된다
추가로 IPhone13 고유의 멤버도 존재하게 된다
추상 클래스 (abstract class)
- 추상 메소드(abstract method)를 포함하고 있는 미완성 클래스
- 자체로 인스턴스를 생성할 수는 없지만 상속을 통해 서브 클래스의 기본적인 생성틀을 제공한다
- 추상 클래스가 꼭 슈퍼 클래스일 필요는 없다
추상 메소드(abstract method)
- 추상 메소드는 구현부가 없으므로 {} 대신 ;로 끝낸다
- 추상 클래스의 상속을 받는 서브 클래스에서 메소드 오버라이딩(overriding)을 통해 추상 메소드를 구현한다
추상 클래스의 상속 예시
Phone 클래스 (추상 클래스 + 슈퍼 클래스)
public abstract class Phone {
// 필드
protected String number;
protected String color;
// 생성자
public Phone(String number, String color) {
this.number = number;
this.color = color;
}
// 추상 메소드
public abstract void call();
public abstract void message();
}
IOS 클래스 (추상 클래스 + 서브 클래스)
public abstract class IOS extends Phone {
// 생성자 (Phone 클래스의 생성자를 상속받음)
public IPhone(String name, String color) {
super(name, color);
}
// 추상 메소드 (IPhone 클래스의 추상 메소드)
public abstract void siri();
}
IPhone13 클래스 (서브 클래스)
public class IPhone12 extends IOS {
// 생성자
public IPhone13(String name, String color) {
super(name, color);
}
// 추상 메소드 오버라이딩(overriding)
@Override
public void siri() {
System.out.println("아이폰 13 음성인식 실행");
}
@Override
public void call() {
System.out.println("아이폰 13 전화 실행");
}
@Override
public void sms() {
System.out.println("아이폰 13 문자 실행");
}
// IPhone12 클래스 고유의 메소드
public void itunes() {
System.out.println("아이폰13 아이튠즈 실행");
}
}
- 가장 하위 클래스에서 메소드 오버라이딩을 통해 추상 메소드의 구현부를 완성해야 한다
- 메소드 오버라이딩시 annotation(@Override)이 붙는다
'국비교육 > 국비교육' 카테고리의 다른 글
day14 - 0811 (0) | 2022.08.12 |
---|---|
day13 - 0810 (0) | 2022.08.10 |
day11 - 0805 (0) | 2022.08.09 |
day10 - 0804 (0) | 2022.08.05 |
day9 - 0803 (0) | 2022.08.04 |