ホームページ  >  記事  >  別のクラスを拡張するクラスからメソッドを取得する

別のクラスを拡張するクラスからメソッドを取得する

王林
王林転載
2024-02-09 08:40:30554ブラウズ

PHP では、あるクラスで別のクラスのメソッドを使用する必要がある状況によく遭遇します。現時点では、別のクラスを継承またはインスタンス化することでそのメソッドを取得できます。継承とは、あるクラスが別のクラスからプロパティとメソッドを継承することを意味し、これは extends キーワードによって実現されます。インスタンス化とは、クラスのインスタンス オブジェクトを作成し、そのオブジェクトを通じて別のクラスのメソッドを呼び出すことを指します。継承でもインスタンス化でも、あるクラス内で別のクラスのメソッドを簡単に取得できるため、コードの再利用性と柔軟性が向上します。

質問内容

別のクラスを拡張するクラスがあります。ユーザーの入力に基づいて、「a」が入力された場合、クラスはサブクラス a である必要がありますが、「b」が入力された場合、クラスはサブクラス b になります。メインクラスに含める必要がある変数があります。定義した変数はメインクラスからのものであるため、サブクラスのメソッドにアクセスできません。どうすれば機能させることができますか?

これは分解の一例です。 myclass 変数は他の場所で使用されるため、どこでもサブクラスとして使用できるようにする必要があります。

リーリー

subclassamethod と subclassbmethod をメインクラスに配置できることはわかっていますが、それがサブクラスの一部でない場合、これらのメソッドを呼び出すことはできません。

サブクラスaとサブクラスbの両方を受け入れるようにmyclassを宣言する方法はありますか?

解決策

これは、変数 myclass が存在し、null または次のようなクラスのインスタンスを指すように制限されているということを意味します。 class は mainclass またはそのサブタイプです。

Java の設定方法では、java は、すべての 考えられるシナリオ で意味をなさない限り、この変数との対話をコンパイルすることを拒否します。 p> つまり、たとえ

であっても、コード フローのある時点で、その変数がコンパイラである mysubclassb のインスタンスを指している必要があることを合理的な疑いを超えて証明できます。それは気にしないでしょう。 あなたのコーディングスタイルには疑問があります。これはあなたの Java のやり方ではありません。

変数名としての

myclass

は、「これがどのように機能するのか理解できません」と叫んでいるだけであることに注意してください。これは非常に誤解を招きやすいものです。変数はインスタンスのみを参照でき、クラスは参照できません。 余談ですが、コード スニペットでは

static

が誤用されています。静的は通常、ほとんどの Java プロジェクトでは必要なく、比較的高度な概念です。意味を知りたくなくても大丈夫です。しかし、それを使用してはいけません。 main は現在静的である必要があります (jdk22 からは静的である必要はなくなります)。そのため、解決策は static をすぐに削除することです。 これを行う方法の例を次に示します。これらのコード スニペットは、型と変数に適切な名前を使用して、内容を明確にしようとしています:

リーリー

コード

new subclassa()

とコード myobject.subclassamethod() が近くない場合、これは機能しません。 instanceof を使用して、myclass (これも非常に不適切な名前) が正しい型であるかどうかを確認する必要があります。のように見える:### リーリー これは、animal

dog のインスタンスを指しているのか、または dog 型のサブタイプのオブジェクトを指しているのかをチェックします。そうでない場合、 if は期待どおりに何も実行しません (animal は Dog のインスタンスではないため、 if はその内容を実行しません)。存在する場合は、それを指す新しい変数 dog Dog を作成し、dog と入力して、その変数に対して Dog のみのメソッドを呼び出せるようにします。 通常、instanceof

を使用することは、コードが正しく設定されていないことを意味することに注意してください。変数

animal 動物 を持つことの重要な点は、この変数に 任意の動物 を含めることができるということです。コードで実際に犬にする必要がある場合は、dog Dog# にする必要があります。 ##。あるいは、このコードのサブクラス、つまり dog Dog として定義されたフィールドを持つ犬専用のバージョンが必要です。複数のオブジェクトの詳細をエンコードするメソッドの場合 ( if (猫の動物インスタンス) docatthing(); else if (犬の動物インスタンス) dodogthing(); などの大きなリスト)、その場合、実際には animal クラスの抽象メソッドである必要があり、animal の各実装は実装を提供します。 class Dog を持つファイルは、Dog 固有のコードになります。が含まれているのは、そこに犬固有のコードが含まれるためです。 どちらの場合でも、instanceof は必要ないので、特に初心者がこれを行う場合、instanceof を使用すると、コーディングの 95% が完了します。スタイル的には非常に悪い方法です。 「悪い」とは、理解するのが難しい、柔軟性に欠ける(将来のコード要件の変更は、学術以外のすべてのプロジェクトが常に経験することであり、想像以上の労力が必要となる)、既存のライブラリ(多くの場合、クラス固有の Java ではない)に統合するのが難しいことを意味します。これは、地球上のほとんどの Java プログラマーが行うことではないため、このコードの学習と理解が不必要に複雑になります。

以上が別のクラスを拡張するクラスからメソッドを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。