[JAVA] 객체지향개념Ⅱ

2025. 10. 13. 20:27·Java

3. 제어자

3.1 static

'클래스의', '공통적인' 의미를 가지고 있으면 JVM 메소드 영역에 저장되며 인스턴스를 생성하지 않아도 사용할 수 있다. 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수 (static 멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다.

3.2 final

변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메소드에 사용되면 오버라이딩 불가, 클래스에 사용되면 상속이 불가능하다.

abstrack

  1. 추상 메소드 : 선언부만 작성하고 구현부는 작성하지 않는 메소드
  2. 추상 클래스 : 클래스 내에 추상 메소드가 선언되어 있음을 의미
  • 추상 클래스는 아직 완성되지 않은 메소드가 존재하기 때문에 인스턴스를 생성할 수 없다.

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
'Java' 카테고리의 다른 글
  • [Java] Java spring에서 안전한 객체 복사와 불변 설계 패턴
  • [Java] this()(생성자에서의 this 호출), this(참조변수로 자기 자신을 가리키는 경우)
  • [Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer
  • [Java] 자바의 추상 클래스 vs 인터페이스 완전 정복
싹난 감자🥔🌱
싹난 감자🥔🌱
개발 블로그
  • 싹난 감자🥔🌱
    감자에 싹이나서 잎이나서
    싹난 감자🥔🌱
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • Spring (3)
      • Java (17)
      • LLM (1)
      • DevOps (4)
      • Algorithm (14)
        • 백준 (4)
        • 프로그래머스 (0)
        • 코드업 (10)
      • Computer Science (3)
        • Operating System (2)
        • Computer Architecture (1)
      • Trouble Shooting 🚀 (0)
      • 회고 & 성장기록 (1)
      • 설계 📐 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    docker
    BufferedReader
    2진수
    자바BufferedReader
    코딩테스트
    자바 입력
    알고리즘입력
    구간합
    Scanner
    2차원 배열
    비트
    자바성능
    배포
    자바Scanner비교
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
싹난 감자🥔🌱
[JAVA] 객체지향개념Ⅱ
상단으로

티스토리툴바