1. 程式人生 > 實用技巧 >java中的多型

java中的多型

知識點:多型的概念、java中多型的使用(方法過載和重寫、子類物件的多型性) 、多型使用的好處

一:什麼是多型

一種事物的多種存在形態,比如說男人和女人都是人,人可以分為男人和女人

二:java中多型的使用場景

(1)方法的過載和重寫

(2)子類物件的多型性

使用前提:a.有類的繼承 b.由子類對父類方法的重寫

使用方式:通過父類的引用指向子類的物件

public class Person {
public void eat(){
System.out.println("人吃飯");
}
}
class Man extends Person{
public void eat(){
System.out.println("男人吃飯");
}
}
//子類物件的多型性使用前提:1.要有類的繼承 2.要有子類對父類方法的重寫
public class Test {
public static void main(String[] args) {
   //子類物件的多型性:父類的引用指向子類物件
Person p=new Man();//向上轉型
//虛擬方法呼叫:通過父類的引用指向子類物件的實體,呼叫方法時,實際執行子類重寫父類的方法
p.eat();
    }
},
子類多型性的使用,是使用父類的引用,指向子類的物件,然後虛擬方法呼叫子類重寫父類的方法
此外補充一下:子類物件的多型性,並不適用於屬性
public class Person {
int id=101;
public void eat(){
System.out.println("人吃飯");
}
}
class Man extends Person{
int id=102;
public void eat(){
System.out.println("男人吃飯");
}
}
public class Test {
public static void main(String[] args) {
Person p=new Man();
p.eat();
System.out.println(p.id);//輸出的是Person物件的id屬性
}
}
程式執行結果:


三:多型使用的好處
消除了類之間的耦合關係
大大提高了程式的簡潔性和可拓展性
public class Person {
int id=101;
public void eat(){
System.out.println("人吃飯");
}
public void drink(){
System.out.println("人喝水");
}
}

class Man extends Person{
int id=102;
public void eat(){
System.out.println("男人吃飯");
}
public void drink(){
System.out.println("男人喝水");
}
public void smoking(){
System.out.println("男人抽菸");
}

}

class Woman extends Person{
public void eat(){
System.out.println("女人吃飯");
}
public void drink(){
System.out.println("女人喝水");
}
public void shoping(){
System.out.println("女人購物");
}
}
public class Test {
public static void main(String[] args) {
Test test=new Test();
test.show(new Person());
test.show(new Man());//Person p=new Man()如果不能使用多型的話,那麼想實現show()方法傳入Man和Woman的物件,在呼叫方法的話,得再寫另外寫兩個各自的show()方法
test.show(new Woman());
}
public void show(Person p){
p.eat();
p.drink();
System.out.println(p.id);
//物件a instanceof 類A 判斷物件a是否是類A的一個例項是的話返回true,否的話返回false
if(p instanceof Man){
Man man=(Man)p;//向下轉型,使用強轉符
man.smoking();
}
if(p instanceof Woman){
Woman woman=(Woman) p;//向下轉型,使用強轉符
woman.shoping();
}
}
}

如果上面main方法中,test.show(new Man()); 和test.show(new Woman());
呼叫show()方法只能傳Person物件的例項,不能使用子類物件的多型性,那麼想實現show()方法傳入Man和Woman的物件都呼叫方法的話,
得再寫另外寫兩個各自的show()方法,這樣程式碼冗餘不簡潔