面向对象的相关面试题
1.面向對象的特征有哪些方面?
???????? 主要有封裝,繼承,多態(tài),也可以加上個抽象.
封裝
封裝是保證軟件部件具有優(yōu)良的模塊性的基礎,封裝的目標就是要實現(xiàn)軟件部件的高內(nèi)聚,低耦合,防止程序相互依賴性而帶來的變動影響.在面對對象的編程語言中,對象是封裝的最基本的單位,面向對象的封裝比傳統(tǒng)語言的封裝更為清晰,有力.面向對象的封裝就是把一個對象的屬性和行為的代碼封裝在一個模塊中,也就是一個類中,屬性用變量定義,行為用方法進行定義,方法可以直接訪問同一個對象中的屬性.通常情況下,只要記住讓變量和訪問這個變量的方法放在一起,將一個類中的成員變量全部定義成private,只有這個類自己的方法才可以訪問到這些成員變量,這就基本上實現(xiàn)對象的封裝.就很同意找出要分配帶這個類上的方法來,就基本上算是會面向對象的編程了.把握一個原則,:把對同一事物進行操作的方法和相關的方法放在同一個類中,把方法和他操作的數(shù)據(jù)放在同一個類中.
例如,人要在黑板上畫圓,這一共涉及三個對象:人、黑板、圓,畫圓的方法要分配給哪個對象呢?由于畫圓需要使用到圓心和半徑,圓心和半徑顯然是圓的屬性,如果將它們在類中定義成了私有的成員變量,那么,畫圓的方法必須分配給圓,它才能訪問到圓心和半徑這兩個屬性,人以后只是調(diào)用圓的畫圓方法、表示給圓發(fā)給消息而已,畫圓這個方法不應該分配在人這個對象上,這就是面向對象的封裝性,即將對象封裝成一個高度自治和相對封閉的個體,對象狀態(tài)(屬性)由這個對象自己的行為(方法)來讀取和改變。一個更便于理解的例子就是,司機將火車剎住了,剎車的動作是分配給司機,還是分配給火車,顯然,應該分配給火車,因為司機自身是不可能有那么大的力氣將一個火車給停下來的,只有火車自己才能完成這一動作,火車需要調(diào)用內(nèi)部的離合器和剎車片等多個器件協(xié)作才能完成剎車這個動作,司機剎車的過程只是給火車發(fā)了一個消息,通知火車要執(zhí)行剎車動作而已。
?
抽象:
抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,并且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面。例如,看到一只螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個方面。例如,定義一個Person類,如下:
classPerson
{
?????????? String name;
?????????? int age;
}
人本來是很復雜的事物,有很多方面,但因為當前系統(tǒng)只需要了解人的姓名和年齡,所以上面定義的類中只包含姓名和年齡這兩個屬性,這就是一種抽像,使用抽象可以避免考慮一些與目標無關的細節(jié)。我對抽象的理解就是不要用顯微鏡去看一個事物的所有方面,這樣涉及的內(nèi)容就太多了,而是要善于劃分問題的邊界,當前系統(tǒng)需要什么,就只考慮什么。
?
繼承:
在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎之上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類數(shù)據(jù)和方法的機制,這是類之間的一種關系,提高了軟件的可重用性和可擴展性。
多態(tài):
多態(tài)是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定。因為在程序運行時才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實現(xiàn)上,從而導致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態(tài),這就是多態(tài)性。多態(tài)性增強了軟件的靈活性和擴展性。例如,下面代碼中的UserDao是一個接口,它定義引用變量userDao指向的實例對象由daofactory.getDao()在執(zhí)行的時候返回,有時候指向的是UserJdbcDao這個實現(xiàn),有時候指向的是UserHibernateDao這個實現(xiàn),這樣,不用修改源代碼,就可以改變userDao指向的具體類實現(xiàn),從而導致userDao.insertUser()方法調(diào)用的具體代碼也隨之改變,即有時候調(diào)用的是UserJdbcDao的insertUser方法,有時候調(diào)用的是UserHibernateDao的insertUser方法:
UserDao userDao = daofactory.getDao();?
userDao.insertUser(user);
比喻:人吃飯,你看到的是左手,還是右手?
?
2.java中實現(xiàn)多態(tài)的機制是什么?
???????? 靠的是父類或者接口定義的引用變量可以指向子類或者具體實現(xiàn)類的實例對象,而程序 調(diào)用的方法在運行期才動態(tài)綁定,就是引用變量所指向的具體實例對象的方法,也就是內(nèi)存里正在運行的那個對象的方法,而不是引用變量的類型中定義的方法.
?
轉載于:https://www.cnblogs.com/gxpblogs/archive/2013/05/08/3068058.html
總結
以上是生活随笔為你收集整理的面向对象的相关面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux6.0 SVN 服务搭建
- 下一篇: wordpress for sae建站全