2011-08-04 13 views
0

私はCプログラミングから来ています。だから私はOOPの概念を初めて学びました。私の質問はこれです:Javaは別のクラスのメソッドを参照します

私はモジュールの束をテストしようとしていますので、私は共通の機能のためのラッパークラスを書くことにしました、私は他のクラスからこれらのメソッドを呼び出すことができます。しかし、私が混乱しているところでは、他のクラスを作るとextendsからmyWrapperClassまでは、staticと定義されていない限り、私はまだラッパークラスのメソッドを使うことができません(そして、ほとんどのチュートリアルでは可能ならば静的から離れてください) newを使用するラッパークラスの新しいインスタンスです。

次に、extendsの使用のポイントは何ですか?それが私が行かなければならない方法ならば、毎回myclass.wrapperclassfunction()の代わりにそれらを使って短くカットするのですか?

ありがとうございます。

+0

いくつかのコード例を見ることができますか? – Vache

+0

親クラス(wrapperクラス)で定義されている関数を子クラスに拡張することができます。あなたの子供のクラスでは、あなたは単にwrapperclassからメソッドを呼び出すことができます。または単にそれをオーバーライドすることができます –

+0

私はあなたのOOPの知識のギャップに対処する必要がある複数の問題があるという感覚を得る。 "" new "を使用してラッパークラスの新しいインスタンスを作成する必要があります。拡張を使用するポイントは何ですか。"句読法はさておき、それは本当に意味をなさない。 – alphazero

答えて

4

私は他のクラスからこれらのメソッドを呼び出すことができます。しかし私は混乱している。他のクラスをmyWrapperClassから拡張すると、静的に定義されていない限り、ラッパークラスのメソッドを使用することはできません。

これは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の問題の編集サマリー]:

あなたは、Javaのプリミティブとオブジェクトタイプの間の区別を確認する必要があります。

プリミティブ型は、単に宣言して使用することができる。

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

オブジェクトタイプが割り当てられなければなりません。ライン間

読書:(Cプログラマのために:。。Javaオブジェクトが動的に割り当てられたヒープは、スタックではないと考えて)

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を定義し、使用して。あなたは、オブジェクトをインスタンス化する必要があり

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

:あなたが言うのJavaでは、

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

:今

これを忘れてしまいました。

s = new SomeClass(); 
0

あなたのwrapperclassfunctionがあなたのwrapperclassでないプライベートで宣言することを確認してください。

public class wrapperClasss{ 

private wrapperMethod(){} 
} 

public class Myclass extends wrapperClasss{ 

    private myMethod(){ 
    wrapperMethod();//this is a compile erro 
    } 
} 
関連する問題