欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java靜態分派和動態分派

朱佳欣1年前6瀏覽0評論

在Java中,方法的調用分為靜態分派和動態分派。這兩種方式是通過參數的類型來區分的。下面我們分別來介紹一下靜態分派和動態分派。

靜態分派

public class StaticDispatch{
public void sayHello(Human human){
System.out.println("hello, human!");
}
public void sayHello(Man man){
System.out.println("hello, man!");
}
public void sayHello(Woman woman){
System.out.println("hello, woman!");
}
public static void main(String[] args){
Human man = new Man();
Human woman = new Woman();
StaticDispatch sd = new StaticDispatch();
sd.sayHello(man);   //hello, human!
sd.sayHello(woman); //hello, human!
}
}
class Human{}
class Man extends Human{}
class Woman extends Human{}

從上述代碼可以看出,靜態分派發生在編譯時期,它是根據參數的靜態類型來確定要調用的方法。當我們傳入的參數是Human類型的時候,Java編譯器會選擇調用sayHello(Human human)方法。即使我們在運行時傳入的是Man或者Woman類型的對象,Java編譯器也只會根據參數的靜態類型來判斷需要調用哪個方法。

動態分派

public class DynamicDispatch{
public void sayHello(Human human){
System.out.println("hello, human!");
}
public void sayHello(Man man){
System.out.println("hello, man!");
}
public void sayHello(Woman woman){
System.out.println("hello, woman!");
}
public static void main(String[] args){
Human man = new Man();
Human woman = new Woman();
DynamicDispatch dd = new DynamicDispatch();
dd.sayHello(man);   //hello, man!
dd.sayHello(woman); //hello, woman!
}
}
class Human{
public void sayHello(){
System.out.println("hello, human!");
}
}
class Man extends Human{
public void sayHello(){
System.out.println("hello, man!");
}
}
class Woman extends Human{
public void sayHello(){
System.out.println("hello, woman!");
}
}

動態分派發生在運行時期,它是根據對象的實際類型來確定要調用的方法。在上述代碼中,我們在Human、Man和Woman類中都定義了sayHello()方法,當我們將Man和Woman對象向上轉型為Human類型時,它們所指向的方法就變成了sayHello()方法。這時候,Java虛擬機在實際調用sayHello()方法時,會根據對象的實際類型來選擇要調用哪一個類中的方法。