色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java靜態(tài)分派和動(dòng)態(tài)分配

在 Java 中,靜態(tài)分派和動(dòng)態(tài)分配是兩種不同的方法調(diào)用方式。

靜態(tài)分派又稱為編譯期分派,是指在編譯階段根據(jù)方法參數(shù)的靜態(tài)類型決定使用哪個(gè)方法。靜態(tài)類型是指在聲明變量時(shí)所使用的類型。例如:

public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
print(animal);
Dog dog = new Dog();
print(dog);
Cat cat = new Cat();
print(cat);
}
public static void print(Animal animal) {
System.out.println("動(dòng)物");
}
public static void print(Dog dog) {
System.out.println("狗");
}
public static void print(Cat cat) {
System.out.println("貓");
}
}
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

由上述代碼可知,print 方法有三個(gè)重載版本,分別接收 Animal、Dog 和 Cat 類型的參數(shù)。在 main 方法中,我們分別創(chuàng)建了一個(gè) Animal、Dog 和 Cat 對(duì)象,并調(diào)用了 print 方法。由于 print 方法的參數(shù)是通過(guò)向上轉(zhuǎn)型轉(zhuǎn)換為 Animal 類型的,因此在編譯階段編譯器會(huì)根據(jù)其靜態(tài)類型決定使用哪個(gè)方法。因?yàn)?Animal、Dog 和 Cat 類型分別是 Animal 類型的子類,因此靜態(tài)類型都是 Animal,所以編譯器在編譯階段會(huì)選擇并聲明使用 print(Animal animal) 方法。

動(dòng)態(tài)分配又稱為運(yùn)行期分派,是指在運(yùn)行階段根據(jù)方法參數(shù)的實(shí)際類型決定使用哪個(gè)方法。實(shí)際類型是指在運(yùn)行時(shí)所引用的對(duì)象的類型。例如:

public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.eat();
animal = new Cat();
animal.eat();
}
}
class Animal {
public void eat() {
System.out.println("動(dòng)物在吃東西");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("狗在吃肉");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("貓?jiān)诔贼~(yú)");
}
}

由上述代碼可知,在 main 方法中分別創(chuàng)建了一個(gè) Dog 和 Cat 對(duì)象并用 Animal 類型的 animal 引用變量引用,然后調(diào)用了相應(yīng)的 eat() 方法。在編譯階段,animal 的靜態(tài)類型是 Animal,因此編譯器只能判斷出 Animal 類型有一個(gè) eat() 方法。而在運(yùn)行階段,animal 引用的實(shí)際類型是運(yùn)行時(shí)所創(chuàng)建的對(duì)象的類型,這時(shí)會(huì)根據(jù)實(shí)際類型來(lái)選擇使用哪個(gè) eat() 方法。例如當(dāng) animal 引用的對(duì)象是 Dog 時(shí),因?yàn)?dog 的實(shí)際類型為 Dog,因此運(yùn)行時(shí)會(huì)選擇并調(diào)用 Dog 類中的 eat() 方法。