복붙노트

[SCALA] 추상 클래스와 형질의 차이 [중복]

SCALA

추상 클래스와 형질의 차이 [중복]

추상 클래스와 특성 사이의 개념적인 차이점은 무엇입니까?

해결법

  1. ==============================

    1.클래스는 하나 개의 수퍼 클래스를 확장, 따라서, 단 하나 개의 추상 클래스 수 있습니다. 여러 클래스를 구성하려면 스칼라 방법은 믹스 인 클래스 구성을 사용하는 것입니다 : 당신이 (선택 사항) 슈퍼 클래스, 자신의 멤버 정의와 하나 이상의 특성을 결합한다. 형질이 그 생성자 파라미터를 가질 수 있는지의 클래스에 비해 제한된다 (스칼라 메뉴얼과 비교).

    클래스는 하나 개의 수퍼 클래스를 확장, 따라서, 단 하나 개의 추상 클래스 수 있습니다. 여러 클래스를 구성하려면 스칼라 방법은 믹스 인 클래스 구성을 사용하는 것입니다 : 당신이 (선택 사항) 슈퍼 클래스, 자신의 멤버 정의와 하나 이상의 특성을 결합한다. 형질이 그 생성자 파라미터를 가질 수 있는지의 클래스에 비해 제한된다 (스칼라 메뉴얼과 비교).

    클래스에 비해 특성의 제한은 다중 상속 일반적인 문제를 방지하기 위해 도입된다. 상속 계층 구조에 대한 다소 복잡한 규칙이 있습니다; 이것이 실제로 중요한 곳 계층 구조를 피하기 위해 최선의 수 있습니다. ;-) 지금까지 내가 이해, 그것은 단지 문제는 두 개의 서로 다른 특성에서 동일한 이름을 가진 동일한 서명 / 두 변수 두 가지 방법을 상속 할 수 있습니다.

  2. ==============================

    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. ==============================

    3.개념적으로 특성은 클래스의 구성 요소가 아니라 그 자체로 클래스입니다. 따라서, 그것은 일반적으로 생성자가없는, 그것은 "그 자체로 독립"을 의미하지 않는다.

    개념적으로 특성은 클래스의 구성 요소가 아니라 그 자체로 클래스입니다. 따라서, 그것은 일반적으로 생성자가없는, 그것은 "그 자체로 독립"을 의미하지 않는다.

    그것은 독립적 인 의미를 가지고 있으며, 특색 때 당신은 단지 객체 지향 방식으로 기능을 추가 할 때 나는 추상 클래스를 사용하는 것이 좋습니다. 당신이 둘 사이에 확실하지 않으면, 당신은 모든 방법을 하나의 일을하고 주위를 회전하는 경우, 당신은 아마 특성을 원하는 것을 찾을 수 있습니다.

    당신의 직원은 모두 "사람"과 "Cloneable을"을 확장해야하는 경우 (비 언어 별) 예를 들어, 특성 사람의 기본 클래스 및 복제 가능합니다.

  4. ==============================

    4.스칼라 적어도 상기 특성 시스템은 동일한 특성을 갖는 유전 방법 전형적인 다중 상속과 관련된 문제, 즉 충돌을 피하기 위해 서브 클래스에서 상위 우선 순위를 명시 적 선언의 방법이있다.

    스칼라 적어도 상기 특성 시스템은 동일한 특성을 갖는 유전 방법 전형적인 다중 상속과 관련된 문제, 즉 충돌을 피하기 위해 서브 클래스에서 상위 우선 순위를 명시 적 선언의 방법이있다.

    형질 자바 인터페이스와 유사하지만, 메소드 구현을 가질 수 있습니다.

  5. from https://stackoverflow.com/questions/2005681/difference-between-abstract-class-and-trait by cc-by-sa and MIT license