クラスが別のクラスを実装する場合...それはどういう意味ですか?私はこのコードサンプルを見つけました: http://www.Java2s.com/Code/Php/Class/extendsandimplement.htm
しかし、残念ながら、それについての説明はありません...
Implementsは、インターフェイスが指定する指定された動作を取ることを意味します。次のインターフェースを検討してください。
_public interface ISpeak
{
public String talk();
}
public class Dog implements ISpeak
{
public String talk()
{
return "bark!";
}
}
public class Cat implements ISpeak
{
public String talk()
{
return "meow!";
}
}
_
Cat
クラスとDog
クラスの両方がISpeak
インターフェイスを実装します。
インターフェースの素晴らしい点は、ISpeak
インターフェースを介してこのクラスのインスタンスを参照できるようになったことです。次の例を考えてみましょう。
_ Dog dog = new Dog();
Cat cat = new Cat();
List<ISpeak> animalsThatTalk = new ArrayList<ISpeak>();
animalsThatTalk.add(dog);
animalsThatTalk.add(cat);
for (ISpeak ispeak : animalsThatTalk)
{
System.out.println(ispeak.talk());
}
_
このループの出力は次のようになります。
樹皮!
ニャー!
インターフェースは、実装クラスが何であるかを公開せずに、クラスdoに基づいてクラスと対話する手段を提供します。
たとえば、Javaで使用される最も一般的なインターフェイスの1つは Comparable
です。オブジェクトがこのインターフェイスを実装している場合、消費者がオブジェクトのソートに使用できる実装を作成できます。
例えば:
_public class Person implements Comparable<Person>
{
private String firstName;
private String lastName;
// Getters/Setters
public int compareTo(Person p)
{
return this.lastName.compareTo(p.getLastName());
}
}
_
次のコードを検討してください。
_// Some code in other class
List<Person> people = getPeopleList();
Collections.sort(people);
_
このコードが行ったことは、Person
クラスに自然な順序付けを提供することでした。 Comparable
インターフェイスを実装したため、Collections.sort()
メソッドを活用して、List
のPerson
オブジェクトをその自然な順序で並べ替えることができました。姓、名で。
Javaのインターフェースを調べる必要があります。簡単なGoogle検索で このページ が明らかになりました。
私はinterface
をある種の「約束」と考えるのが好きです。それを実装するクラスは、期待できる特定の動作を持っているため、実装クラスのインスタンスをインターフェース型に入れることができます。参照。
簡単な例は_Java.lang.Comparable
_インターフェイスです。このインターフェイスのすべてのメソッドを独自のクラスに実装することにより、オブジェクトは互いに「同等」であり、部分的に順序付けできると主張しています。
インターフェイスを実装するには、2つの手順が必要です。
インターフェイス_Java.lang.Comparable
_には、public int compareTo(Object other)
という1つのメソッドしかありません。そのため、そのメソッドを提供する必要があります。
以下に例を示します。このクラスRationalNumber
を考えると:
_public class RationalNumber
{
public int numerator;
public int denominator;
public RationalNumber(int num, int den)
{
this.numerator = num;
this.denominator = den;
}
}
_
(注:Javaパブリックフィールドを持つのは一般的に悪い習慣ですが、これは非常に単純なプレーンオールドデータ型にするつもりなので、パブリックフィールドは気にしません!)
2つのRationalNumber
インスタンスを比較できるようにしたい場合(ソートの目的で、おそらく?)、_Java.lang.Comparable
_インターフェースを実装することでそれを行うことができます。そのためには、2つのことを行う必要があります。compareTo
の定義を提供し、インターフェイスが実装されていることを宣言します。
肉付けされたクラスの外観は次のとおりです。
_public class RationalNumber implements Java.lang.Comparable
{
public int numerator;
public int denominator;
public RationalNumber(int num, int den)
{
this.numerator = num;
this.denominator = den;
}
public int compareTo(Object other)
{
if (other == null || !(other instanceof RationalNumber))
{
return -1; // Put this object before non-RationalNumber objects
}
RationalNumber r = (RationalNumber)other;
// Do the calculations by cross-multiplying. This isn't really important to
// the answer, but the point is we're comparing the two rational numbers.
// And no, I don't care if it's mathematically inaccurate.
int myTotal = this.numerator * other.denominator;
int theirTotal = other.numerator * this.denominator;
if (myTotal < theirTotal) return -1;
if (myTotal > theirTotal) return 1;
return 0;
}
}
_
おそらく考えているのですが、このすべてのポイントは何でしたか?答えは、 this のようなメソッドを見るときです:「何らかの種類の比較可能なオブジェクト」を単に期待するソートアルゴリズム。 (すべてのオブジェクトが_Java.lang.Comparable
_!を実装しなければならないという要件に注意してください。)そのメソッドは、String
sまたはInteger
sまたはRationalNumber
sのいずれかの種類の比較可能なオブジェクトのリストを取ることができます。
注:この回答では、Java 1.4のプラクティスを使用しています。_Java.lang.Comparable
_は現在、汎用インターフェイスですが、汎用を説明する時間はありません。
インターフェイスはクラスを介して実装されます。必要に応じて、これらは純粋に抽象クラスです。
In PHPクラスがインターフェースから実装される場合、そのインターフェースで定義されたメソッドは厳密に従う必要があります。クラスが親クラスを継承する場合、メソッドのパラメーターは変更される場合があります。インターフェイスの場合:
interface ImplementMeStrictly {
public function foo($a, $b);
}
class Obedient implements ImplementMeStrictly {
public function foo($a, $b, $c)
{
}
}
インターフェイスが定義どおりに実装されていないため、エラーが発生します。一方、
class InheritMeLoosely {
public function foo($a)
{
}
}
class IDoWhateverWithFoo extends InheritMeLoosely {
public function foo()
{
}
}
許可されている。
interfaceは、メソッド定義のリスト(本体なし)と考えることができます。クラスがimplementとインターフェースを望んでいる場合、インターフェースにリストされているすべてのメソッドの実装を提供すると言って、契約を締結しています。詳細については、 http://download.Oracle.com/javase/tutorial/Java/concepts/ を参照してください
Javaクラスはインターフェースを実装できます。詳細については http://en.wikipedia.org/wiki/Interface_(Java )を参照してください。PHPについてはわかりません。
お役に立てれば。
インターフェイスは、すべての実装クラスが実装する必要があるメソッドの単純なコントラクトを定義します。クラスがインターフェイスを実装するとき、そのすべてのメソッドの実装を提供する必要があります。
ポスターは、言語に関するある程度の知識を前提としていると思います。
これはインターフェースと呼ばれます。多くのOO言語にはこの機能があります。ここのphpの説明を読むことをお勧めします。 http://de2.php.net/interface