Frog is cry
Day10 본문
다형성(Polymorphism)
1. 오버로딩(Overloading) : 넘쳐서 불러오기
매개변수의 타입 혹은 개수가 다르면
같은 이름의 메소드로 선언할 수 있다.
2.
상속(inheritance)
1. 구현된 클래스에 있는 필드를 새로 만드는 클래스에서 그대로
사용하고 싶을 때 필드를 다시 선언하는 것이 아니라
기존 클래스에서 그대로 받아 와서 사용한다.
이 때 상속이 필요하다.
2. 여러 클래스를 만들 때 공통된 필드들이 반복해서 선언된다.
이 때 부모 클래스를 선언하고 그 안에 공통된 필드들을 구현한다.
자식 클래스들은 그대로 상속받아 사용한다.
상속 방법
class A{
A필드
}
class B extends A{
A, B필드
}
A : 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스
B : 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스
상속의 동작원리
상속을 받으면 자식 클래스타입의 객체는
부모 필드에 접근이 가능해진다. 하지만 코드상에 생성자는
자식 생성자만 호출한다. 만약 자식 필드만 메모리에 할당되면
절대 자식 객체는 부모 필드에 접근할 수 없다. 따라서
자식 생성자를 호출하면 자동으로 부모 생성자가 먼저 호출되고
그 다음 자식 생성자가 호출된다.
자식 필드 내에서 부모 생성자를 호출할 때에는 super()로 호출한다.
super()
super는 부모클래스명으로 봐도 된다. 따라서 Car의 자식이
SuperCar라면, SuperCar에서 super()가 있다면
Car()로 생각하고 읽는다!
클래스명 뒤에 소괄호가 있다면 생성자이기 때문에
super()는 부모 생성자이다. 항상 자식에서 작성한 소스코드보다
먼저 호출되어야 하므로 반드시 해당 영역 맨 위에 작성해준다.
자식 생성자에서 부모 생성자 호출
자식 생성자에서 초기화 생성자를 선언할 때 부모의 필드도
초기화 해야할 때가 있다. 이 때 다시 this.으로 초기화하지 않고
부모의 초기화 생성자를 호출하여 값을 전달해준다.
예)
자식 생성자(매개변수1, 매개변수2,....){
super(값1, 값2);
}
Comments