1.什么是面向?qū)ο螅?/h1>
面向?qū)ο笫且环N思想花吟,是基于面向過程而言的,就是說面向?qū)ο笫菍⒐δ艿韧ㄟ^對象來實現(xiàn)厨姚,將功能封裝進對象之中衅澈,讓對象去實現(xiàn)具體的細節(jié);這種思想是將數(shù)據(jù)作為第一位谬墙,而方法或者說是算法作為其次矾麻,這是對數(shù)據(jù)一種優(yōu)化,操作起來更加的方便芭梯,簡化了過程。面向?qū)ο笥腥筇卣鳎悍庋b性弄喘、繼承性玖喘、多態(tài)性,其中封裝性指的是隱藏了對象的屬性和實現(xiàn)細節(jié)蘑志,僅對外提供公共的訪問方式累奈,這樣就隔離了具體的變化,便于使用急但,提高了復(fù)用性和安全性澎媒。對于繼承性,就是兩種事物間存在著一定的所屬關(guān)系波桩,那么繼承的類就可以從被繼承的類中獲得一些屬性和方法戒努;這就提高了代碼的復(fù)用性。繼承是作為多態(tài)的前提的镐躲。多態(tài)是說父類或接口的引用指向了子類對象储玫,這就提高了程序的擴展性,也就是說只要實現(xiàn)或繼承了同一個接口或類萤皂,那么就可以使用父類中相應(yīng)的方法撒穷,提高程序擴展性,但是多態(tài)有一點不好之處在于:父類引用不能訪問子類中的成員裆熙。
舉例來說:就是:比如說你要去飯店吃飯端礼,你只需要飯店禽笑,找到飯店的服務(wù)員,跟她說你要吃什么蛤奥,然后就會給你做出來讓你吃佳镜,你并不需要知道這個飯是怎么錯做的,你只需要面向這個服務(wù)員喻括,告訴他你要吃什么邀杏,然后他也只需要面向你吃完收到錢就好,不需要知道你怎么對這個飯進行吃唬血。
1望蜡、特點:
1:將復(fù)雜的事情簡單化。
2:面向?qū)ο髮⒁郧暗倪^程中的執(zhí)行者拷恨,變成了指揮者脖律。
3:面向?qū)ο筮@種思想是符合現(xiàn)在人們思考習(xí)慣的一種思想。
2腕侄、面向?qū)ο蟮娜筇卣鳎悍庋b小泉,繼承、多態(tài)
1.封裝:只隱藏對象的屬性和實現(xiàn)細節(jié)冕杠,僅對外提供公共訪問方式
好處:將變化隔離微姊、便于使用、提高復(fù)用性分预、提高安全性
原則:將不需要對外提供的內(nèi)容隱藏起來兢交;把屬性隱藏,提供公共方法對其訪問
2.繼承:提高代碼復(fù)用性笼痹;繼承是多態(tài)的前提
注:
①子類中所有的構(gòu)造函數(shù)都會默認訪問父類中的空參數(shù)的構(gòu)造函數(shù)配喳,默認第一行有super();若無空參數(shù)構(gòu)造函數(shù)凳干,子類中需指定晴裹;另外,子類構(gòu)造函數(shù)中可自己用this指定自身的其他構(gòu)造函數(shù)救赐。
3.多態(tài)
是父類或接口定義的引用變量可以指向子類或具體實現(xiàn)類的實例對象
好處:提高了程序的擴展性
弊端:當(dāng)父類引用指向子類對象時涧团,雖提高了擴展性,但只能訪問父類中具備的方法净响,不可訪問子類中的方法少欺;即訪問的局限性。
前提:實現(xiàn)或繼承關(guān)系馋贤;覆寫父類方法赞别。
2.類和對象的區(qū)別?
1.類型:代碼中可以通過class關(guān)鍵字配乓,自定義一個數(shù)據(jù)類型
(1)數(shù)據(jù)類型:簡稱類型:簡稱類-> 自定義數(shù)據(jù)類型-> 自定義 類
(2)基本語法:
class 類型名稱:
類型中的代碼
(3)類型名稱命名規(guī)范:見名知意仿滔、駝峰命名法[一個或者多個英文單詞組成惠毁、每個單詞首字母大寫]
(4)類型:通過項目中需要的大量有相似特征和行為的對象,抽象出來的一個數(shù)據(jù)類型
2.對象:
對象:有具體特征和行為操作的事物
代碼:有具體(特征)屬性和(行為)方法的對象-> 事物
3. 類型 VS 對象 區(qū)別崎页?
類型:通過對象抽象出來的一個數(shù)據(jù)類型
類型中需要定義對象需要的特征[屬性|變量]和行為[方法]
class Person:
# 定義屬性鞠绰、特征
# 固定寫法:在__init__方法中,定義類型的屬性
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 定義方法飒焦、行為
def eat(self, food):
print("吃飯了")
對象:某中類型一個具體存在的事物
代碼中的對象蜈膨,需要通過類型來創(chuàng)建
如:tom = Person('湯姆', 18, '男')
通過 類型名稱() 的方式創(chuàng)建對象
創(chuàng)建對象時,自動調(diào)用執(zhí)行__init__()方法牺荠,將對象需要的數(shù)據(jù)傳遞過去
3.類的聲明定義語法操作翁巍?
(1.)聲明定義類型?
對象:某中類型一個具體存在的事物
代碼中的對象休雌,需要通過類型來創(chuàng)建
如:tom = Person('湯姆', 18, '男')
通過 類型名稱() 的方式創(chuàng)建對象
創(chuàng)建對象時灶壶,自動調(diào)用執(zhí)行__init__()方法,將對象需要的數(shù)據(jù)傳遞過去
(2.)初始化類型屬性杈曲?
-> Author.__init__()方法初始化數(shù)據(jù)
(3.)定義類型的方法驰凛?
-> Author.__init__()方法初始化數(shù)據(jù)
4.對象的創(chuàng)建、屬性的調(diào)用担扑、方法的調(diào)用恰响?
變量的創(chuàng)建:
-> Author.init()方法初始化數(shù)據(jù)
屬性的調(diào)用:
class Author:
# 給對象的特征賦值,在init()中進行操作
def init(self, username, password, nickname):
self.username = username
self.password = password
self.nickname = nickname
方法的使用:
調(diào)用執(zhí)行方法:類似與調(diào)用執(zhí)行函數(shù)
方法的調(diào)用執(zhí)行:必須通過對象的引用變量進行調(diào)用!
author = Author()
author.introduction()