본문 바로가기

국비교육/국비교육

day12 - 0808

상속 (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