TIL(2023.07.27)

JAKE·2023년 7월 27일

TIL

목록 보기
12/48
post-thumbnail

🏃‍♂️What I learned

1. 상속

1) ① 한 클래스가 가지고 있는 속성과 기능(필드, 메소드)을 ② 또 다른 클래스에 끌어오는 기능

① = 부모 클래스, ② = 자식 클래스

2) 상속의 장점 - 코드길이 감소, 코드의 유지 및 보수가 용이함
3) 상속 이용방법

[접근제한자] class 자식클래스명 extends 부모클래스명{}

4) 상속의 종류
① 단일 상속 - 하나의 클래스는 하나의 부모만 가질 수 있음(but, 부모의 부모는 존재 가능)
② 다중 상속 - 여러개의 부모 클래스로부터 상속(자바에서는 미지원)

5) 상속의 특징
① 오버라이딩 - 부모 클래스 안의 메서드를 가져와 사용하되, 필요에 맞게 수정 가능
                   - 자식 객체를 통해 사용하면 후손 메소드가 우선권을 가짐
                   - 메서드 위에 '@override' 표기 필수

② 자식클래스에서는 부모 클래스의 생성자, 초기화 내용에 접근할 수 없음 -> super( ) 활용

e.g.)

// 부모 필드

public class Person {

	private String name;
	private int age;
	private String nationality;
// 자식 생성자

public Student(String name, int age, String nationality, int grade, int classroom) {
		// 부모의 필드에 private 접근제한자가 있어서 직접 접근 불가
		// 부모의 생성자 중 매개변수 생성자 호출
        super(name, age, nationality);  // 이 필드변수에 대해서는 this 필요없음
		
		this.grade = grade;
		this.classroom = classroom;

2. 다형성

1) 상속을 이용한 기술로, 여러 자식 객체를 참조하여 활용
2) 업캐스팅 - 자식타입의 참조변수가 부모 객체를 참조
                - 이 경우 자식클래스는 부모 클래스의 속성과 기능만 활용 가능
e.g.)

// 부모 클래스
public class Car {

	private String engine;
	private String fuel;
	private int wheel;
// 자식클래스
public class Spark extends Car {

	private double discountOffer;
// 업캐스팅
Car car = new Spark(); // car 객체는 부모 클래스의 필드와 메서드만 사용 가능

3) 다운캐스팅 - 부모 타입의 참조변수가 자식 객체를 참조
                   - 업캐스팅이 반드시 선행되어 있어야함

// 다운캐스팅
((Car)car).moveSpark(); // car 객체는 부모 클래스의 필드와 메서드만 사용 가능

0개의 댓글