針對接口編程是什么原則,設計原則 —— 針對接口編程而不針對實現編程

 2023-11-18 阅读 28 评论 0

摘要:對“針對接口編程,而不是針對實現編程”的理解應該針對接口編程 而不是針對實現編程 0. 理解 接口,定義了一堆空實現函數的接口,如下,是對其全部實現類的約束,即必須實現我(接口)事先規定的那些方法,以使得我在操縱父
  • 對“針對接口編程,而不是針對實現編程”的理解
  • 應該針對接口編程 而不是針對實現編程

0. 理解

  • 接口,定義了一堆空實現函數的接口,如下,是對其全部實現類的約束,即必須實現我(接口)事先規定的那些方法,以使得我在操縱父類接口(指向子類實現)時,獲得一種操作上的一致性(多態),而忽視其子類具體實現上的差異,即封裝變化;

    public interface Iterator {boolean hasNext();Object next();
    }

1. 針對接口編程是多態性的體現

  • 針對對象編程簡單地說,就是傳遞的是具體的子類;
    • 而針對接口編程,傳遞的則是父類引用,這樣便可發揮多態性“父類引用指向子類對象”的特點和優勢;

來看一個簡答的例子:

public interface Animal {...public void makeSound();
}

具體到“狗”,需給出其實現:

public class Dog implements Animal {@Overridepublic void makeSound() {System.out.println("Wang! Wang!");}
}

針對接口編程是什么原則?同理可給出其他具體動物類(豬牛羊等)的叫聲實現。此時如何傳遞動物的實例化對象,調用其叫聲方法呢?

  • 針對實現編程:

    public void hearDogSound(Dog dog) {dog.makeSound();
    }

    如果需要調用牛的叫聲方法:

    public void hearCowSound(Cow cow){cow.makeSound();
    }

    針對對象編程,每想調用不同子類對象的共有方法,都要去創建一個與該類相關的 hearSound() 方法,這樣在 interface 中定義的共有方法便失去了意義。

  • 接口中的方法都不能被實現、針對接口編程:

    public void hearSound(Animal animal) {animal.makeSound();
    }

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/176064.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息