2017-09-03 20 views
1

私は晩年の拘束を理解しようとしています。検索結果: レイトバインディング:実行時に変数が実行されるまで型が不明です。通常は代入によって行われますが、型を強制する他の手段があります。動的に型付けされた言語は、これを基礎とする機能と呼んでいますが、多くの静的型付き言語では、遅延バインディングを実現する方法がいくつかあります。Java:レイトバインディングはどこで使うの?何がメリット?

および例は、このようなものです:

public class DynamicBindingTest { 

    public static void main(String args[]) { 
     Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car 
     vehicle.start();  //Car's start called because start() is overridden method 
    } 
} 

class Vehicle { 

    public void start() { 
     System.out.println("Inside start method of Vehicle"); 
    } 
} 

class Car extends Vehicle { 

    @Override 
    public void start() { 
     System.out.println("Inside start method of Car"); 
    } 
} 

しかし、どのような給付車両車両=新しい車が(です)。これを使ってちょうど書くべきである 車の車=新しい車(); ?私に説明してください?

+0

ジェネリック開発、依存性注入、そして全体的には、実際にはケースに依存します。 – Transcendent

+0

C.f. [「インターフェイスへのプログラムとはどういう意味ですか?」](https://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – markspace

+0

@markspaceそれは良い答えがあります。 –

答えて

3

しかし、何のメリットがありますか?これを使ってCar car = new Car();と書くだけです。 ?私に説明してください?

はい、可能です。この小さな例では、遅延バインディングにはほとんど利益がありません。

しかし、このやや異なる例はどうですか?に明らかになる

public static void main(String args[]) { 
    Vehicle vehicle = (args[0].equals("car")) ? new Car() : new Vehicle(); 
    vehicle.start(); 
} 

...または私たちはVehicleの複数のサブクラスを追加し、(例えば)CarまたはTruckをインスタンスであれば...


他の利点は、あまりにもありますが、あなたはプログラミングで経験を積むにつれて、特にと書いて、大きなプログラムを維持しなければならないので、


通常、Javaは静的型付き言語として分類されます。あなたの例と私の両方の多形性/後期バインディングは、静的型付けに依存しています。ダイナミックな型指定は、型キャスト、instanceofなどを使用する場合にのみ有効です。

型チェックが行われたときに、静的型と動的型の違いは約です。コンパイル時に(ほとんど)型チェックが行われ、コンパイル時にエラーが報告されると、言語は静的にチェックされます。


またVehicleの複数のサブクラスを追加し、mainのソースコードにサブクラスの名前に言及せず、車両の任意の種類を作成し、開始するmain方法を変更することができます。それはあなたの例では明白ではない、遅延バインディングのもう一つの側面です。

0

呼び出されるメソッドは、実行時に、ここではすべて、オブジェクトの実行時の型に基づいて決定されます。コンパイル時に行われる唯一の決定は、最終メソッド、プライベートメソッド、または静的メソッドの呼び出し、またはオーバーロードされたメソッドのセットの選択です(オーバーロードされたメソッドがfinal、private、またはstaticでない場合でも実行時の選択につながります)。

2番目の質問に対する回答: なぜですか?

vehicle car= new Car(); 

なく

Car car= new Car(); 

これは多型であり、あなたが車でforループを使用する必要があるとbike.Theyは両方の我々は車両の配列を行いますので、ここでの車両であり、ときの状況を考えます両方のオブジェクトを格納することができ、私たちは自転車と車のループを別々に使う必要はありません。

関連する問題