2011-08-04 8 views
0

저는 C 프로그래밍에서 왔으므로 OOP 개념을 처음 접했습니다. 내 질문은이 것입니다 :Java - 다른 클래스의 메소드 참조

그래서 모듈의 무리를 테스트하려고, 그래서 다른 클래스에서 이러한 메서드를 호출 할 수있는 일반적인 기능에 대한 래퍼 클래스를 작성하기로 결정했습니다. 하지만 내가 혼란 스러우면 다른 클래스를 만들면 extendsmyWrapperClass에서 나올 때까지는 래퍼 클래스의 메서드를 사용할 수 없다는 것입니다. 정의 된 클래스가 아니면 static (대부분의 자습서에서는 가능하면 정적에서 벗어나려고합니다.) 또는 만들 필요가 있습니다. new을 사용하는 래퍼 클래스의 새 인스턴스

그런 다음 extends을 사용하는 시점은 무엇입니까? 그게 내가 가야만하는 방법이라면, 매번 myclass.wrapperclassfunction()을 작성하는 대신에 그들을 사용하는 지름길이 있습니까?

미리 감사드립니다.

+0

몇 가지 예제 코드를 볼 수 있습니까? – Vache

+0

부모 클래스 (wrapperclass)에서 정의하는 함수를 자식 클래스까지 확장 할 수 있습니다. 당신의 children 클래스에서, 당신은 단지 wrapperclass로부터 메소드를 호출 할 수있다. 아니면 그냥 override 할 수있다. –

+0

OOP 지식 격차에서 해결해야 할 여러 문제가 있다는 생각이 든다. ""new "를 사용하여 래퍼 클래스의 새 인스턴스를 만들어야합니다. 그런 다음 extend를 사용하는 지점은 무엇입니까." 구두점을 제쳐두고, 그것은 실제로 말이되지 않습니다. – alphazero

답변

4

그래서 다른 클래스에서이 메소드를 호출 할 수 있습니다. 하지만 내가 혼란 스럽다. 다른 클래스를 myWrapperClass에서 확장하면 static이 아닌 한 래퍼 클래스의 메서드를 사용할 수 없습니다.

false입니다.

절대적으로 그렇게 할 수 있습니다. 일반적인 기능은 다양한 모듈 (서브 클래스)에서 동일한 방법 경우

public class MyWrapperClass { 

    public void commonMethod() { 
    } 

} 

public class YourClass extends MyWrapperClass { 

    public void anotherMethod() { 
      commonMethod(); 
      // other stuff 
    } 
} 
+0

나는 그것이 그의 문제라고 생각하지 않습니다. 그는 왜 물체를 할당해야하는지 이해하지 못합니다. – alphazero

+0

@alphazero - OP가 서브 클래스에서 수퍼 클래스의 메서드를 호출한다고 생각하면 나에게 소리가났다. 그는 정적으로 만들거나 수퍼 클래스를 인스턴스화해야한다고 생각했다. 나는 그가 할 필요가 없다는 것을 설명하려고 노력했다. – Kal

+0

나는 당신의 말을 듣는다. OP가 텍스트를 '명확히'하기로 결정할 때까지 텍스트를 해독하는 것이 다소 어렵습니다. 어쨌든 그는 "나는 아직 사용할 수 없다"고 말했다. 그래서 나는 그가 실제로 그것을 시도했다고 생각했다. 그리고 만약 그가 정말로 간단한 확장을 가지고 있고 그 아이를 인스턴스화했다면, 어떻게 그는 아마도 "여전히"기본 클래스 메소드를 사용할 수 있습니까? 나는 그의 C 혈통에 내기하고있다 :) – alphazero

0

, 당신은 공통의 슈퍼 클래스에 모듈 밖으로 인수 분해 할 수 있고 단지 방법은 한 번이 정의했습니다. 메서드가 모든 하위 클래스에서 다른 방식으로 구현되었지만 가지고있는 하위 클래스 인스턴스에 관계없이 동일한 방식으로 메서드를 호출하려면 수퍼 클래스에서 abstract으로 선언하고 각 하위 클래스에서 구현을 가질 수 있습니다. — 사이에있는 경우 일부 서브 클래스를 제외한 모든 서브 클래스가 동일한 구현 —을 가지면 가장 일반적인 구현을 수퍼 클래스로 제외하고 예외적 인 서브 클래스에서이를 대체 할 수 있습니다.

0

[OP의 문제 편집 요약] :

당신은 자바에서 기본 및 객체 유형 간의 차이를 검토 할 필요가있다.

기본 유형은 단순히 선언하고 사용할 수 있습니다

int f; // Java (or is c? :) 
    f = 10; 

객체 유형을 할당해야합니다. 라인 사이

읽기 : (C 프로그래머의 경우 :.. 자바 객체가 동적으로 할당되는 힙, 스택하지 생각)

Foo myFoo = new Foo(); // Java 
    struct foo *myFoo = (struct foo *) malloc(sizeof(struct foo)); // good old C 

- - 초기 대답

혼란의 요점은 이것이다 에 의해서만이 타입 시스템에게베이스의 확장이 존재한다고 알려주고 있다고 생각하는 것 같습니다. 타입에 마술처럼 메소드를 호출 할 수 있어야합니다.

정적 인 방법을 사용했기 때문에 인스턴스를 만들지 않아도됩니다.

카이의 답을 따라 뭔가가 있다고 가정 해 봅시다 (올바른 btw입니다). 그런 다음

:

/** using Kai's classes */ 
public void foobar() { 
    YourClass foo = new YourClass(); 
    foo.commonMethod(); // try it .. 
} 

검토 무엇 해야 정의하고 Cstruct를 사용 단순히의 노하우.

이제 잊지이 : 자바에서

typedef struct { 
      int foo; 
      char bar[3]; 
    } extended; 

    extended s; // this is not just declaring s; it is also allocating it 
    s.foo = 10; // hey, no malloc. nasty Java insists on new .. 

, 당신은 말할 때 :

SomeClass s; // s declared but not instantiated (think 'allocated') 

그런 다음 개체를 인스턴스화해야합니다.

s = new SomeClass(); 
0

당신이 당신의 wrapperclassfunction이 wrapperclass 민간하지 입니다 선언해야합니다.

public class wrapperClasss{ 

private wrapperMethod(){} 
} 

public class Myclass extends wrapperClasss{ 

    private myMethod(){ 
    wrapperMethod();//this is a compile erro 
    } 
} 
관련 문제