[SCALA] 추상 클래스와 형질의 차이 [중복]
SCALA추상 클래스와 형질의 차이 [중복]
추상 클래스와 특성 사이의 개념적인 차이점은 무엇입니까?
해결법
-
==============================
1.클래스는 하나 개의 수퍼 클래스를 확장, 따라서, 단 하나 개의 추상 클래스 수 있습니다. 여러 클래스를 구성하려면 스칼라 방법은 믹스 인 클래스 구성을 사용하는 것입니다 : 당신이 (선택 사항) 슈퍼 클래스, 자신의 멤버 정의와 하나 이상의 특성을 결합한다. 형질이 그 생성자 파라미터를 가질 수 있는지의 클래스에 비해 제한된다 (스칼라 메뉴얼과 비교).
클래스는 하나 개의 수퍼 클래스를 확장, 따라서, 단 하나 개의 추상 클래스 수 있습니다. 여러 클래스를 구성하려면 스칼라 방법은 믹스 인 클래스 구성을 사용하는 것입니다 : 당신이 (선택 사항) 슈퍼 클래스, 자신의 멤버 정의와 하나 이상의 특성을 결합한다. 형질이 그 생성자 파라미터를 가질 수 있는지의 클래스에 비해 제한된다 (스칼라 메뉴얼과 비교).
클래스에 비해 특성의 제한은 다중 상속 일반적인 문제를 방지하기 위해 도입된다. 상속 계층 구조에 대한 다소 복잡한 규칙이 있습니다; 이것이 실제로 중요한 곳 계층 구조를 피하기 위해 최선의 수 있습니다. ;-) 지금까지 내가 이해, 그것은 단지 문제는 두 개의 서로 다른 특성에서 동일한 이름을 가진 동일한 서명 / 두 변수 두 가지 방법을 상속 할 수 있습니다.
-
==============================
2.특성의 한 측면은 그들이 쌓을 수 있다는 것입니다. AOP (주위 조언)의 제한된 형태로 허용.
특성의 한 측면은 그들이 쌓을 수 있다는 것입니다. AOP (주위 조언)의 제한된 형태로 허용.
trait A{ def a = 1 } trait X extends A{ override def a = { println("X") super.a } } trait Y extends A{ override def a = { println("Y") super.a } } scala> val xy = new AnyRef with X with Y xy: java.lang.Object with X with Y = $anon$1@6e9b6a scala> xy.a Y X res0: Int = 1 scala> val yx = new AnyRef with Y with X yx: java.lang.Object with Y with X = $anon$1@188c838 scala> yx.a X Y res1: Int = 1
슈퍼 해상도는 상속 계층 구조의 선형을 반영한다.
-
==============================
3.개념적으로 특성은 클래스의 구성 요소가 아니라 그 자체로 클래스입니다. 따라서, 그것은 일반적으로 생성자가없는, 그것은 "그 자체로 독립"을 의미하지 않는다.
개념적으로 특성은 클래스의 구성 요소가 아니라 그 자체로 클래스입니다. 따라서, 그것은 일반적으로 생성자가없는, 그것은 "그 자체로 독립"을 의미하지 않는다.
그것은 독립적 인 의미를 가지고 있으며, 특색 때 당신은 단지 객체 지향 방식으로 기능을 추가 할 때 나는 추상 클래스를 사용하는 것이 좋습니다. 당신이 둘 사이에 확실하지 않으면, 당신은 모든 방법을 하나의 일을하고 주위를 회전하는 경우, 당신은 아마 특성을 원하는 것을 찾을 수 있습니다.
당신의 직원은 모두 "사람"과 "Cloneable을"을 확장해야하는 경우 (비 언어 별) 예를 들어, 특성 사람의 기본 클래스 및 복제 가능합니다.
-
==============================
4.스칼라 적어도 상기 특성 시스템은 동일한 특성을 갖는 유전 방법 전형적인 다중 상속과 관련된 문제, 즉 충돌을 피하기 위해 서브 클래스에서 상위 우선 순위를 명시 적 선언의 방법이있다.
스칼라 적어도 상기 특성 시스템은 동일한 특성을 갖는 유전 방법 전형적인 다중 상속과 관련된 문제, 즉 충돌을 피하기 위해 서브 클래스에서 상위 우선 순위를 명시 적 선언의 방법이있다.
형질 자바 인터페이스와 유사하지만, 메소드 구현을 가질 수 있습니다.
from https://stackoverflow.com/questions/2005681/difference-between-abstract-class-and-trait by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] (자바 소스에 혼합했다) 받는다는와 스칼라 응용 프로그램을 구축 (0) | 2019.11.25 |
---|---|
[SCALA] 목록의 이동 평균을 계산 (0) | 2019.11.25 |
[SCALA] scala.concurrent.Promise의 사용 사례는 무엇입니까? (0) | 2019.11.25 |
[SCALA] 접속사 패턴 매칭 (무늬 패턴) (0) | 2019.11.25 |
[SCALA] 스칼라에서하는 키워드 무슨 유형을 '이해 (0) | 2019.11.25 |