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()方法,這樣代碼冗余不簡潔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM