Scala 의 클래스 구성원 변수 와 자바 의 차이

2007 단어
자바 에서 클래스 구성원 변수의 접근 수식 자 는 4 가지 로 나 눌 수 있 습 니 다. Public, proctected, private 와 기본 값 입 니 다.기본적으로 구성원 변수 앞 에 수식 자 를 추가 하지 않 는 것 을 말한다.아래 표를 통 해 자바 에서 의 4 가지 수정자 의 차 이 를 간단히 살 펴 보 자.
가시 성
public
protected
묵인
private
동류
예.
예.
예.
예.
같은 가방 의 어떤 종류 도
예.
예.
예.
아니.
같은 가방 의 하위 클래스
예.
예.
예.
아니.
같은 가방 밖의 하위 클래스
예.
네, 계승 을 통 해.
아니.
아니.
가방 밖의 어떤 비자 류 도
예.
아니.
아니.
아니.
Scala 의 클래스 구성원 변수의 접근 수정자
private, proctected, 기본 값 으로 나 뉜 다 (수정자 없 음)
  • proctected 는 scala 에서 proctected 가 자바 보다 더욱 엄격 합 니 다. 하위 클래스 (같은 가방 에 있 든 없 든) 만 접근 할 수 있 습 니 다
  • 기본적으로 scala 파일 을 컴 파일 하면 알 수 있 습 니 다. 이러한 상황 에서 생 성 된 class 파일 에서 이 변 수 는 private 형식 입 니 다. val 로 정의 되면 scala 는 자동 으로 getter 방법 을 생 성 합 니 다. var 로 정의 되면 getter 와 setter 방법 을 자동 으로 생 성 합 니 다. 그리고 이 방법 들 은 모두 Public 입 니 다.그래서 이 변수 자 체 는 private 이 고 getter 와 setter 방법 으로 만 접근 합 니 다.변 수 를 사용 하 는 방식 은 자바 의 Public 수식 변수 와 유사 하지만 본질 은 다르다.
  • private 는 기본 수정자 와 유사 한 원리 로 생 성 된 getter 나 setter 방법 만 private 로 되 어 있 습 니 다. 이 로 인해 이러한 유형의 모든 대상 에 접근 할 수 있 는 변 수 를 초래 합 니 다. 예 를 들 어
  • class Person {
      private var id = 0
    
      def equals(other: Person): Boolean = {
        //other Person      ,  equals     
        //  other    id    
        //           Person       id     
        id == other.id
      }
    }
    
  • private 의 확장 - 대상 의 사유 scala 는 사유 변수 에 대해 더욱 엄격 한 제한 방식, 즉 대상 의 사유 이다.예 를 들 어 상기 사례 에서 id 라 는 변 수 를 . 로 정의 할 수 있 습 니 다. 이러한 정의 의 변화
  • setter 와 getter 방법 은 더 이상 생 성 되 지 않 습 니 다
  • 이 변 수 는 현재 대상 에 만 접근 할 수 있 으 며, 유사 한 private[this] var id = 0 형식의 접근 은 허용 되 지 않 습 니 다
  • class Person {
      private[this] var id = 0
    
      //          id
      def generateId = (new util.Random).nextInt(3) + id
    
      def equals(other: Person): Boolean = {
        //       :value id is not a member of Person id == other.id
        //other           id     
        id == other.id
      }
    }
    

    좋은 웹페이지 즐겨찾기