java之多態的使用


java之多態的使用

首先,什么是多態?我們應該從什么角度來理解多態?其實,我們不妨把多態理解成一種事物的多種存在形態,比如,貓和狗都可以變成動物,而動物又可以變成貓和狗。

為了充分理解多態,我們可以從以下這幾個方面來理解多態。

第一、從多態的體現方面:我們使用多態的時候,創建的是父類的引用,開辟的是子類的空間,由於沒有開辟父類的空間,所以是父類的引用指向子類對象,並不是真正的父類自己創建了對象,而且父類對象的引用還可以作為函數參數來接收子類對象哦!

第二、多態實現的前提:必須是類與類之間要有關系,要么繼承,要么實現,存在覆蓋,其實就是有抽象函數。

第三、從多態的好處:大大提高程序的可拓展性

第四、多態的應用:1.父類對象的引用指向子類對象,其實本質上是一個向上轉型,就像int轉成double一樣,兒子穿了一身爸爸的衣服,扮成了爸爸。2.但變成了爸爸之后,只能使用爸爸特有的技能,兒子怎么能夠使用自己本身的技能呢?這時候就需要向下轉型,脫下偽裝,將父類對象的引用強轉成子類類型,就可以使用子類特有的技能了。

第五、多態的弊端:提高了拓展性,但是只能使用父類的引用訪問父類的成員。


多態:可以理解為事物存在的多種體現形態。

人:男人,女人
動物:貓,狗。
貓 x = new 貓();
動物 x = new 貓();
  1. 多態的體現
    父類的引用指向了自己的子類對象。
    父類的引用也可以接收自己的子類對象。

  2. 多態的前提
    必須是類與類之間有關系。要么繼承,要么實現。
    通常還有一個前提:存在覆蓋。

  3. 多態的好處
    多態的出現大大的提高程序的擴展性。

  4. 多態的弊端:
    提高了擴展性,但是只能使用父類的引用訪問父類中的成員。

  5. 多態的應用

/* 動物, 貓,狗。 */
        
        abstract class Animal {
            abstract void eat();
        }
        
        class Cat extends Animal {
            public void eat()  {
                System.out.println("吃魚");
            }
            public void catchMouse() {
                System.out.println("抓老鼠");
            }
        }
        
        
        class Dog extends Animal {
            public void eat() {
                System.out.println("吃骨頭");
            }
            public void kanJia() {
                System.out.println("看家");
            }
        }
        
        
        class Pig extends Animal  {
            public void eat()  {
                System.out.println("飼料");
            }
            public void gongDi()  {
                System.out.println("拱地");
            }
        }
        
        //-----------------------------------------
        
        
        class DuoTaiDemo 
        {
            public static void main(String[] args) 
            {
                //Cat c = new Cat();
                //c.eat();
        
                //Dog d = new Dog();
                //d.eat();
                //Cat c = new Cat();
                /* Cat c1 = new Cat(); function(c1); function(new Dog()); function(new Pig()); */
        
                //Animal c = new Cat();
                //c.eat();
        
                
                function(new Cat());
                function(new Dog());
                function(new Pig());
                
        
                
            }
            public static void function(Animal a)  {
            	//Animal a = new Cat();
                a.eat();
                //a.catchMouse();
            }
            
            /* public static void function(Cat c)// { c.eat(); } public static void function(Dog d) { d.eat(); } public static void function(Pig p) { p.eat(); } */
        
        }


多態:可以理解為事物存在的多種體現形態。

人:男人,女人
動物:貓,狗。
貓 x = new 貓();
動物 x = new 貓();
  1. 多態的體現
    父類的引用指向了自己的子類對象。
    父類的引用也可以接收自己的子類對象。
  2. 多態的前提
    必須是類與類之間有關系。要么繼承,要么實現。
    通常還有一個前提:存在覆蓋。
  3. 多態的好處
    多態的出現大大的提高程序的擴展性。
  4. 多態的弊端:
    雖然提高了擴展性,但是只能使用父類的引用訪問父類中的成員。
  5. 多態的應用
  6. 多態的出現代碼中的特點(多態使用的注意事項)

第二個問題:如何使用子類特有方法。

    /* 動物, 貓,狗。 */
    
    class Cat extends Animal {
        public void eat() {
            System.out.println("吃魚");
        }
        public void catchMouse() {
            System.out.println("抓老鼠");
        }
    }
    
    
    class Dog extends Animal {
        public void eat() {
            System.out.println("吃骨頭");
        }
        public void kanJia() {
            System.out.println("看家");
        }
    }
    
    
    class Pig extends Animal {
        public void eat() {
            System.out.println("飼料");
        }
        public void gongDi() {
            System.out.println("拱地");
        }
    }
    
    //-----------------------------------------
    
    
    class DuoTaiDemo2  {
        public static void main(String[] args)  {
            //Animal a = new Cat();//類型提升。 向上轉型。
            //a.eat();
    
            //如果想要調用貓的特有方法時,如何操作?
            //強制將父類的引用。轉成子類類型。向下轉型。
            ///Cat c = (Cat)a;
            //c.catchMouse();
            //千萬不要出現這樣的操作,就是將父類對象轉成子類類型。
            //我們能轉換的是父類應用指向了自己的子類對象時,該應用可以被提升,也可以被強制轉換。
            //多態自始至終都是子類對象在做着變化。
    // Animal a = new Animal();
    // Cat c = (Cat)a;
            
    
            /* 畢姥爺 x = new 畢老師(); x.講課(); 畢老師 y = (畢老師)x; y.看電影(); */
            function(new Dog());
            function(new Cat());
    
    
        }
        public static void function(Animal a) {
        	//Animal a = new Cat();
            a.eat();
            
            /* if(a instanceof Animal) { System.out.println("haha"); } else */
            if(a instanceof Cat) {
                Cat c = (Cat)a;
                c.catchMouse();
            } else if(a instanceof Dog) {
                Dog c = (Dog)a;
                c.kanJia();
            }
    
    
            /* instanceof : 用於判斷對象的類型。 對象 intanceof 類型(類類型 接口類型) */
        
        }
        
    
    
    }


免責聲明!

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



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