2009-03-02 5 views
18

クラスを書くときのインタフェースの目的は何ですか?クラスのインタフェースの目的

heres私はオンラインで見た例です。

<?php 
interface Chargeable { 
    public function getPrice(); 
} 

class Employee implements Chargeable { 
    protected $price; 

    public function getPrice() { 
     return $this->price; 
    } 
} 

$product = new Employee(); 

?> 
+0

この[質問](http://stackoverflow.com/questions/219425/interface-contract-を参照してくださいことを行うことができますクラスオブジェクト)。 –

答えて

10

インタフェースは多態性を可能にするオブジェクト指向プログラミングの概念です。基本的には、インタフェースは契約のようなもので、それを実装するクラスは特定の機能を提供することに同意します。

この例では、getPriceメソッドを使用できます。次に、このメソッドを持つオブジェクトを利用するコードを、どのようなクラスであるか心配することなく作成できます。

0

インターフェイスを使用すると、インターフェイスを実装から分離することができます。これは、他のものの中であなたのコードに直交性を持たせたいときに便利です。

Chargeableを実装している限り、基本的にChargeableを受け入れ、そこにオブジェクトを渡すことができる関数を作成することができます。これにより、Employeeクラスを変更する必要が生じた場合でも、柔軟に対応できます。また、あなたのメソッドは "課金可能"なオブジェクトを受け入れることができます。ここ

29

は私がおよそ

abstract class Plane { 

    public function openDoors(); 
} 


interface Fliers { 
    public function fly(); 
} 

このシナリオを想像を学んだ方法についての方法の一つである今Boeing747は彼らに

class Boeing747 extends Plane implements Fliers { 
    public function fly() { 
    // some stuff 
    } 

    public function openDoors() { 
    // do something 
    } 

} 

class Tweety implements Fliers{ 
    public function fly() { 
    // some stuff 
    } 
} 

を使用していることができます飛行機で飛ぶことができる飛行機飛ぶことができますが、意味がない "openDoors"です。要点は、インターフェイスはさまざまな種類のオブジェクトで実装できるが、クラスは実装できないということです。 Boeing747とTweetyの共通点は何もありませんが、どちらも飛行することができます。

+3

完璧な答えIMHO – gargantuan

+1

これは非常に便利な答えです。わかりやすくするために編集したものが大好きです。 –

+2

私はあなたが編集したいと思っていますか? –

0

インターフェイスではなく複数の継承を持つ言語では、抽象クラスがあります。 PHPには多重継承はないので、インタフェースがあります。 1つのクラスはさまざまなインターフェースを実装できます。唯一のポイントは、クラスに一定のメソッドセットがあることを保証することです。

0

私は現時点で自分自身を苦労させている(と私はOPと同じ本を読んでいると思う...)。

インターフェイスは、インターフェイスに表示される関数/プロパティを実装するために、インターフェイスを実装するクラスに対して単に「契約上の」義務を課しているようです。しかし、実装が定義されていないため、インターフェイスを実装するクラス/オブジェクトがユニークなやり方で行うことはできませんか?

実際の継承はありませんか?

-2

は私がそうインタフェースクラスは一般的な概念であるクラス

public interface transport{ 
public double getSpeed(){return(0/*the speed*/);} 
public void setSpeed(){return(0/*the speed*/);} 


} 
class car extend transport{ 
//implementation of transport interface 
public double getSpeed(){return(speed/*the speed*/);} 
public void setSpeed(){speed=250;} 
} 
class train extend transport{ 
//implementation of transport interface 
.... 

} 

class plane extend transport{ 
//implementation of transport interface 
.... 
} 

のこのタイプのdimnationを理解するためにあなたに例をあげてみましょう。

+0

悪い答え。または全く答えない。 – Lenin

+0

インタフェース 'implements'は拡張されておらず、拡張されていない – Louwki

+0

インタフェースが実装されています。また、インタフェースの背後にあるアイデアは、インタフェースを実装するオブジェクトはすべて、インタフェース型のオブジェクトを予期するメソッドにパラメータとして渡すことができるということです。古典的な例はコンパイラとコンパイラです。 – Jim

-1

最初のインターフェイス構造は、世界の外で通信するために実装されたクラスへのインターフェイスを提供します。簡単な例はテレビです。テレビはクラスであり、ボタンはインターフェースです。

adv of interfaces:

1-Javaは多重継承をサポートしていません。異なるクラスから2つのメソッドを追加したい場合(ClassA、ClassBを拡張できません)、実装できません.A、Bは問題ありません。

2その他のアドバンテージはセキュリティと柔軟性です 私たちがクラスのメソッドのいくつかに到達できないようにするには、どうすればよいでしょうか? 多型+インターフェイスは、私たちは散歩をしたくないと樹皮の方法が到達不能であるべき 場合

abstract class Animal { 
    String name; 
    int age; 

    public Animal(String name, int age) { 
     super(); 
     this.name = name; 
     this.age = age; 
    } 

} 

class Dog extends Animal implements Run { 

    public Dog(String name, int age) { 
     super(name, age); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 

    } 

    public void bark() { 

    } 

} 

class Cat extends Animal implements Climb { 

    public Cat(String name, int age) { 
     super(name, age); 

    } 

    @Override 
    public void climb() { 
     // TODO Auto-generated method stub 

    } 

    public void walk() { 

    } 

} 

public class Main { 

    public static void main(String[] args) { 

     // if we want that some of methods of the class are not reachable how 
     // can we do that? 
     // polymorphism + interface we can do that 
     // for example if we do not want walk and bark methods should be 
     // unreachable 

     Climb cat = new Cat("boncuk", 5); 
     Run dog = new Dog("karabas", 7); 

     // see we cannot reach the method walk() or bark() 
     dog.walk(); // will give an error. since there is no such a method in the interface. 

    } 

}} 

    enter code here 
関連する問題