➡ 객체가 생성될 때 호출되며 객체를 초기화하는 역할
➡ 모든 클래스는 반드시 생성자가 하나 이상 존재
-------------------------------------------------------
public class Car {
public Car(String model) {}
}
➡ 객체 즉, 인스턴스 자신을 표현하는 키워드
➡ 매개변수명과 객체의 필드명이 동일할 경우
-------------------------------------------------------
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
- 참조 변수의 타입 변환?
➡ 자동 타입 변환, 강제 타입 변환 두 개가 있음
🔻 자동 타입 변환
- 부모 타입 변수 = 자식 타입 객체
- 자식 객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급
- 부모 클래스에 선언된 즉, 상속받은 멤버만 접근
🔻 강제 타입 변환
- 자식 타입 변수 = (자식 타입) 부모 타입 객체
- 타입 변환 연산자를 사용하여 강제로 자식 타입으로 변환
-------------------------------------------------------
Mammal mammal = new Whale();
mammal.feeding();
Whale whale = (Whale) mammal;
whale.swimming();
➡ 여러 가지 형태를 가질 수 있는 능력
➡ 부모 타이어 변수 = 자식 타이어 객체;를 선언하여 자동 타입 변환된 변수를 사용
-------------------------------------------------------
Tire tire = new HankookTire("HANKOOK");
Tire tire = new KiaTire("KIA");
➡ 미완성된 설계도
➡ abstract 키워드를 이용하여 추상 클래스와 추상 메서드 선언
-------------------------------------------------------
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
-------------------------------------------------------
➡ 추상 메서드는 extends 키워드를 사용하여 클래스에서 상속
-------------------------------------------------------
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
}
}
➡ 두 객체를 연결해 주는 다리 역할
➡ 상속 관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야 할 때
➡ interface 키워드를 사용하여 인터페이스를 선언
-------------------------------------------------------
public interface 인터페이스명 { }
-------------------------------------------------------
➡ implements 키워드를 사용하여 인터페이스를 구현
-------------------------------------------------------
public class 클래스명 implements 인터페이스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
}
}