제 2 스칼라 객체 지향 프로그래밍 : 9, getClass 및 classOf 11 추상, 추상 클래스와 필드, 10, 부모 클래스 생성자 호출;

getClass 및 classOf에서 6.3.4. 스칼라

클래스 A는 클래스 B를 확장

B = B를 새로 만들기 b.getClass == classOf [A]

B의 새로운 B = B == b.getClass classOf [B]

 

  • 이 지정된 대상 객체 클래스 및 서브 클래스가 정확하게 판정 할 수없는 것으로 판정되는 경우에만 IsInstanceOf 객체 지정된 클래스 즉;
  • 미세 지정된 클래스의 대상 객체, 다음 만 getClass 및 classOf를 사용할 수있는 것으로 판단되면,
  • p.getClass 정확하게 객체 클래스를 취득 할 수 classOf [XX]을 정확하게 == 연산자는 다음의 판정을 사용하여 등급을 얻을 수있다;
  • 예를 들면 :
  • 스칼라는, 각 클래스는 일차 및 이차 생성자 생성자 복수 중 하나를 가질 수 있으며, 각 보조 생성자의 첫 번째 행은 생성자 또는 다른 보조 주 생성자 코드를 호출해야하며, 따라서 상기 보조 상수 생성자 서브 직접을 할 수 없다 부모 클래스의 생성자를 호출;
패키지 cn.itcast.extends_demo의 클래스 person4 {} 클래스 Student4 (가) 확장 person4 개체 Student4 { DEF 주 (인수가 : 어레이 [문자열]) { 발에 P = person4 새로운 새 Student4 
    예 // p는 클래스의 여부를 판단한다 person4 println 메소드 (p.isInstanceOf [person4])는 true // 
    // 여부를 판정 person4 P 형의 형태 println 메소드 (p.getClass == classOf false로 [person4]) // 
    // 여부는 P 형의 종류를 판정 Student4 println 메소드 (p.getClass == classOf을 [Student4])는 true // 
  } 
}




 
   

   

   

   

 

6.3.5. 스칼라 부모 클래스의 생성자를 호출

 

  • 당신은 서브 클래스의 기본 생성자에서 상위 클래스의 생성자를 호출 할 수 있습니다.
  • 부모 클래스의 생성자가 같은 재사용 서브 클래스가, 변형 된 발 또는 VAR를 사용하지 않는 이름과 나이, 같은 분야에서 정의 된 경우, 그렇지 않으면 부모 클래스의 필드를 커버하는 서브 클래스를 고려하고, 특정 요구됩니다 override 키워드를 사용합니다.
  • 예를 들면 :
패키지 cn.itcast.extends_demo의 클래스 Person7 ( 발에 이름 : 문자열,  나이 : INT) { var에 점수 : 더블 = 0.0 var에 주소 : 문자열 = "베이징" 는 def이 (이름 : 문자열, 점수 : 더블) = { 
    // 각 보조 라인이 먼저 다른 보조 또는 주 생성자 생성자 코드의 생성자를 호출해야합니다 
    // 생성자의 주요 코드 다음은이 (이름, 30) 은이 . 점수 = 점수 
  } 
  // 다른 보조 생성자 는 def이 (이름 : 문자열, 주소 : 문자열) = { 은이 (이름, 100.0) 은이 . 어드레스 = 주소 
  } 
}


 
 
 


     
     


 
     
     


클래스 Student7 (이름 : 문자열, 점수 : 더블) 확장 Person7를 (이름, 점수)

 

6.3.6. 스칼라 추상 클래스

  • 부모 클래스 경우,이 특정 방법이 바로 달성 할 수 있지만, 우선 다른 서브 클래스에 의존하는 다른 방법으로 달성 오버라이드 (override) 할 필요가있다. 이 경우, 부모 클래스는이 방법 만 포함 서명 방법, 메소드 본문 자유 형식으로 기록 할 수 있으며,이 형태는 추상적 인 방법이라고;
  • 이 추상 필드의 추상 메소드를 포함하는 경우 클래스는, 또는, 그것은하지 인스턴스화하는 추상 클래스 선언 추상 클래스에 사용되어야한다;
  • 때없이 키워드를 대체 할 수 있습니다 서브 클래스에서 재정의 추상 클래스의 추상 메소드;
  • 예를 들면 :
패키지 cn.itcast.extends_demo 추상 클래스 Person9 ( 발에 이름 : 문자열) { 
  // 리턴 타입은, 그렇지 않으면 기본 유니으로 돌아 주목해야 T DEF 의 sayHello : 문자열 DEF : sayBye 문자열 
} 클래스 Student9 (이름 : 문자열) (가) 확장 Person9 (이름) { 
  // 리턴 타입이 기본 그렇지 않으면 주목해야 DEF : 문자열 = "여보세요"+ 이름의 sayHello DEF : sayBye 문자열 = "안녕,"이름 + 
} 객체 Student9 { DEF 주 (인수 : 배열 [문자열]) {  S를 = 새로운 새로운 Student9 ( "톰") 에 println (s.sayHello) 에 println



 

 



 
 


 
   
   
    (s.sayBye)
  }
}

 

6.3.7. 스칼라 추상적 필드

  • 부모 클래스는 필드에 정의되어 있지만 초기 값을 제공하지 않은 경우,이 필드 추상적 필드;
  • 예를 들면 :
패키지 cn.itcast.extends_demo 추상 클래스 Person10 ( 발에 이름 : 문자열) {

//抽象필드 
    나이 : 지능
}
클래스 Student10 (이름 : 문자열) 확장 Person10 (이름) {
   발의 연령 : 지능 = 50
}

추천

출처www.cnblogs.com/mediocreWorld/p/11367071.html