2012-04-28 9 views
1

静的バインディングと動的バインディングの概念をJavaで説明してください。Javaの静的バインディングと動的バインディングについて

コンパイル時にJavaでの静的バインディングが発生し、実行時に動的バインディングが発生します。静的バインディングは、バインディングのType(Javaクラス)情報を使用し、動的バインディングはObjectを使用してバインディングを解決します。

これは私の理解のためのコードです。

public class StaticBindingTest { 

    public static void main (String args[]) { 
     Collection c = new HashSet(); 
     StaticBindingTest et = new StaticBindingTest(); 
     et.sort (c);   
    } 

    //overloaded method takes Collection argument 
    public Collection sort(Collection c) { 
     System.out.println ("Inside Collection sort method"); 
     return c; 
    }  

    //another overloaded method which takes HashSet argument which is sub class 
    public Collection sort (HashSet hs){ 
     System.out.println ("Inside HashSet sort method"); 
     return hs; 
    }   
} 

と上記のプログラムの出力は、動的バインディングのためのコレクションのソート方法

の中にあった...

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"); 
    } 
} 

出力は車のstartメソッドの中にありました。助言してください:この理解は正しいのでしょうか?いくつかの例を教えてください。ありがとう。

+0

これはSO上で、これらの日規範のようです... –

答えて

0

スタティックバインディングはコンパイル時に使用され、オーバーロードされたメソッド(通常、メソッドの解決にコンパイル時に引数の型が使用される)のsort()メソッドでよく使用されます。

動的バインディング(dynamic dispatch)は、通常、多型とオーバーライドメソッドに関連付けられている - レシーバ(車両)の種類は方法を解決するために実行時に使用されるあなたの例ではstart()メソッドを。

0

あなたはそれを正しく要約したと思うし、shamsも正しく情報を追加したと思います。少しだけ情報を追加するには、最初に、メソッド定義とメソッド呼び出しの関連付けをバインディングと呼びます。だから、あなたが正しく指摘した静的バインディングは、コンパイラによってコンパイル時に解決できるバインディング(初期バインディングまたは静的バインディングとも呼ばれます)です。一方、動的入札や遅延バインディングは、コンパイラがコンパイル時にコール/バインディングを解決できないことを意味します(実行時に発生します)。いくつかの例については以下を参照してください:

//static binding example 
class Human{ 
.... 
} 
class Boy extends Human{ 
    public void walk(){ 
     System.out.println("Boy walks"); 
    } 
    public static void main(String args[]) { 
     Boy obj1 = new Boy(); 
     obj1.walk(); 
    } 
} 

//Overriding is a perfect example of Dynamic binding 
package beginnersbook.com; 
class Human{ 
    public void walk() 
    { 
     System.out.println("Human walks"); 
    } 
} 
class Boy extends Human{ 
    public void walk(){ 
     System.out.println("Boy walks"); 
    } 
    public static void main(String args[]) { 
     //Reference is of parent class 
     Human myobj = new Boy(); 
     myobj.walk(); 
    } 
} 

source

関連する問題