2014-04-05 2 views
0

나는 다음과 같은 코드 쓰기 : 나는 방법에서 super.mem을 삭제어떻게 오브젝트 액세스 슈퍼 클래스의 멤버

class TestClass(val mem:Int) 
    object TestObj extends TestClass(3){ 
     var sum = 5 
     def apply(a : Int, b :Int, ext : TestClass) = sum + a + b + super.mem + ext.mem 
    } 
    println(TestObj(2,4,new TestClass(2)) 

이 코드가 성공적으로 컴파일 할 수 있습니다, 적용, 그래서 어떻게 알고 싶어를 객체의 수퍼 멤버에 액세스합니까?

+1

'this.mem' 또는'mem'이 아닌 이유는 무엇입니까? –

답변

1

super.mem 앞에 추가 할 필요가 없습니다. mem을 사용하면 TestObj은 수퍼 클래스 TestClass에서 상속됩니다.

class TestClass(val mem: Int) 

object TestObj extends TestClass(3) { 
    var sum = 5 
    def apply(a: Int, b: Int, ext: TestClass) = sum + a + b + mem + ext.mem 
} 

println(TestObj(2, 4, new TestClass(2)) 
+0

감사합니다. 작동합니다. 하지만 여전히 질문이 있습니다. 객체의 메서드가 정적 메서드와 비슷하기 때문에 상속 된 비 정적 클래스의 일반 멤버가 직접 그 메서드에 액세스 할 수있는 이유는 무엇입니까? Java 또는 C++에서 정적 메소드는 인스턴스 레벨 멤버가 아닌 클래스 레벨 멤버에만 액세스 할 수 있습니다. – tecdigger

+1

"객체의 메서드가 정적 메서드와 비슷하기 때문에"- 그 아이디어가 당신을 오도 한 것입니다. TestObj는 어떤 클래스의 인스턴스이며 그 클래스는 TestClass를 확장합니다. 상속은 평소대로 작동합니다. 싱글 톤 메소드는 종종 자바의 정적 메소드와 동일한 목적을하지만 (실제로는 좀 더 깔끔하게), 실제로는 * Java에서 정적 메소드 *라고 부릅니다. 그러나 스칼라에서는 모든 것이 실제로 하나의 객체입니다. – AmigoNico

관련 문제