3. 제어자
3.1 static
'클래스의', '공통적인' 의미를 가지고 있으면 JVM 메소드 영역에 저장되며 인스턴스를 생성하지 않아도 사용할 수 있다. 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수 (static 멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다.
3.2 final
변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메소드에 사용되면 오버라이딩 불가, 클래스에 사용되면 상속이 불가능하다.
abstrack
- 추상 메소드 : 선언부만 작성하고 구현부는 작성하지 않는 메소드
- 추상 클래스 : 클래스 내에 추상 메소드가 선언되어 있음을 의미
- 추상 클래스는 아직 완성되지 않은 메소드가 존재하기 때문에 인스턴스를 생성할 수 없다.
3.4 접근 제어자
접근 제어자는 멤버 또는 클래스에 사용되어 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 합니다.
public > protected > (default) > private
제어자같은 클래스같은 패키지자손 클래스전체
| public | O | O | O | O |
| protected | O | O | O | |
| (default) | O | O | ||
| private | O |
- 접근 제어자 default 는 아무런 접근 제어자도 붙이지 않은 것을 의미합니다.
4. 다형성
4.1 다형성
다형성은 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였습니다. 일반적으로 인스턴스의 타입과 참조변수의 타입이 일치하지만, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것도 가능합니다.
4.2 참조변수의 형변환
참조변수의 형변환은 사용할 수 있는 멤버의 개수를 조절하기 위한 것 이며, 서로 상속관계에 있는 클래스 사이에서만 가능합니다.
자손타입에서 조상 타입으로 형변환하는 경우, 형변환은 생략이 가능 하지만
조상타입에서 자손타입으로 형변환하는 경우 형변환은 생략이 불가능합니다.
형변환 예제
public class CastingTest1 {
public static void main(String[] args) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe; // car = (Car) fe; 형변환 생략 가능
// car.water(); 자식 클래스에 정의된 메서드 호출 불가
fe2 = (FireEngine) car; // 자식 타입 <- 부모 타입 형변환 생략 불가능
fe2.water(); // 자식 클래스에 정의된 메서드 호출 가능
}
}
class Car{
String color;
int door;
void drive() {
System.out.println("drive");
}
void stop() {
System.out.println("stop");
}
}
class FireEngine extends Car { // Car 클래스 상속
void water() {
System.out.println("water");
}
}

'Java' 카테고리의 다른 글
| [Java] Java spring에서 안전한 객체 복사와 불변 설계 패턴 (0) | 2025.10.17 |
|---|---|
| [Java] this()(생성자에서의 this 호출), this(참조변수로 자기 자신을 가리키는 경우) (0) | 2025.10.17 |
| [Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer (0) | 2025.10.11 |
| [Java] 자바의 추상 클래스 vs 인터페이스 완전 정복 (0) | 2025.10.09 |
| [JAVA] 데이터 추상화 vs 제어 추상화 (0) | 2025.10.09 |