面向對象基礎知識整理

1、什么是對象? 什么是類?

對象是可以看的見摸得著的,對象可以是任何東西,比如水杯,書,手機等。準確的說,對象是一個自包含的實體,用一組可識別的特性和行為標識的。

類就是具有相同的屬性和功能的對象的抽象集合。

實例,就是一個真實的對象。比如說‘人’這個對象,就是’人‘類的實例了。而實例化就是創建對象的過程,使用new關鍵字來創建的。

2、構造方法

構造方法,又叫構造函數,其實就是對類進行實例化。構造方法與類名同名,無返回值,也不需要void,在new時候調用。

3、方法重載

方法重載提供了創建同名的多個方法的能力,但這些方法需使用不同的參數類型。

方法重載時,兩個方法必須要方法名相同,單參數類型或者個數必須要有所不同。

好處,在不改變原方法的基礎上,新增功能(方法名相同)。

4、屬性與修飾符

屬性是一個方法或一對方法,但在調用他的代碼看來,他是一個字段,即屬性適合于以字段的方式使用方法調用的場合。

字段是存儲類需要滿足其設計所需要的數據,字段是與類相關的變量。

public表示它所修飾的類成員可以允許其他任何類來訪問,俗稱公有的。而private表示值允許同一個類中的成員訪問,其他類包括它的子類無法訪問,俗稱私有的。

通常字段都是private,即私有變量,而屬性都是public,即公有的變量。?

5、面向對象三大特性

封裝:每個對象都包含它能進行操作所需要的所有信息,這個特性稱為封裝,因此對象不必依賴其他對象來完成自己的操作。

繼承:對象的繼承代表了一種‘is-a’的關系,如果兩個對象A和B,可以描述為B是A,這表明B可以繼承A。繼承者還可以理解為是對被繼承者的特殊化,因為除了具備被繼承者的特性外,還具備自己獨有的個性。繼承定義了類如何相互關聯,共享特性。繼承的工作方式是,定義父類和子類,或叫做基類和派生類,其中子類繼承父類的所有特性。子類不但繼承了父類的所有特性,還可以定義的新的特性。

如果子類繼承父類,第一 子類擁有父類非private的屬性和功能;第二 子類具有自己的屬性和功能,及子類可以擴展父類沒有的功能和屬性;第三 子類可以重寫父類的方法。

protected表示繼承時子類可以對基類有完全訪問權。

繼承是有缺點的,那就是父類變,子類也要跟著改變。繼承顯然是一種強耦合的關系。

多態:第一 子類以父類的身份出現 第二 子類在工作時以自己的工作方式實現 第三 子類以父類的身份出現時,子類特有的屬性和方法不可以使用。

6、抽象類

抽象類需要注意幾點,第一 抽象類不能被實例化。第二 抽象類的方法必須被子類重寫,不然沒有任何的存在意義。第三 如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其他一般方法。

抽象類擁有盡可能多的共同代碼,擁有盡可能少的數據。

因為抽象類是一個概念,它提供一個繼承的出發點,當設計一個新的抽象類時,一定是用來繼承的,所以,在一個以繼承關系形成的頂級結構里面,樹葉節點應當時具體類,而樹枝節點均應當時抽象類。也就是說,具體類不是用來繼承的。

7、接口

接口十八隱式公共方法和屬性組合起來,以封裝特定功能的一個集合。一旦類實現了接口,類就可以支持接口所制定的所有屬性和成員。接口不允許提供任何成員的執行方式。

實現接口的類就必須要實現接口中的所有方法和屬性。

抽象類可以給出一些成員的實現,接口卻不包含成員的實現,抽象類的抽象成員可被之類部分實現,接口的成員需要實現類完全實現,一個類只能繼承一個抽象類,但可實現多接口。

類是對對象的抽取,抽象類是對類的抽取,接口是對行為的抽象。

如果行為跨越不同類的對象,可以使用接口;對于一些相識的類對象,用繼承抽象類。

從設計角度講,抽象類是從子類中發現了公共的東西,泛化出父類,然后子類繼承父類,而接口是根本不知子類的存在,方法如何實現還不確認,預先定義。

抽象類是自底而上抽象出來的,而接口則是自頂向下設計出來的。

?

轉載于:https://www.cnblogs.com/zkjblogs/p/6582885.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3/ \9 20/ \15 7return its level order traversal as: [[3],[9,20],[15,7] ] 解題思路:能夠…

鍵盤事件相關

轉自下面兩個鏈接:http://www.cnblogs.com/starof/p/6558581.html http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html 在 JavaScript 中監聽 IME 鍵盤輸入事件 在 JavaScript 中監聽用戶的鍵盤輸入是很容易的事情,但用戶一旦使用了輸入…

【R】語言第二課----- 變量的使用方法

num1<-c(9.1,8.2,7.3) num2<-1:10 char<-c(a,b,c) #單引號or雙引號都可以 logit<-c(TRUE,FALSE,T,F) c(1,a,TRUE) sex<-c(F,M,F,M) sex sexf<-factor(sex) sexf num1[1]<-100 #索引一定要加方括號 num1[c(1,3)]<-c(99.9,77.7) num1[c(T,F,T)] num1[-2]…

Petuum - Careers

Petuum - CareersCloudformation

【R】語言第三課----矩陣

#矩陣 ?matrix m<-matrix(1:6,nrow 2,ncol3,dimnames list(c(r1,r2),c(c1,c2,c3))) m#默認按列排列 m<-matrix(1:6,nrow 2,ncol3,byrow T,dimnames list(c(r1,r2),c(c1,c2,c3)))m class(m) m[1,1] m[1,]# 相當于 m[c(T,F),] m[,1] m[r1,]m[1,] <- c(100,99,98…

誰說菜鳥不會數據分析--讀書筆記

如果看不清可以下載下來&#xff0c;打開&#xff0c;放大。僅供參考。 轉載于:https://www.cnblogs.com/sunshinewang/p/6591772.html

[MySQL 5.6優化] --order by limit x,x 優化

簡介&#xff1a;order by limit x ,x 在實際工作中有各種業務需求要有order by的排序&#xff0c;有時候處理不好則會造成系統宕機&#xff01;原理&#xff1a;a.通過索引來獲取排序b.通過內部算法獲取排序&#xff1a; 案例具體SQL&#xff1a; SELECT c.order_price orderP…

【R】語言第四課----讀取文件

install.packages("readxl") getwd() setwd("E:/作業4") library(readxl) tianmao<-read_excel(tianmaoTV.xlsx,skip1)#把第一行跳過&#xff0c;直接從第二行開始讀取 #創建新變量 tianmao[total_sales]<-tianmao$current_price*tianmao$month_sale…

Html.Partial和Html. RenderPartial用法

Html.Partial和Html. RenderPartial用法Html.partial和RenderPartial的用法與區別Html.partial和RenderPartial都是輸出html片段&#xff0c;區別在于Partial是將視圖內容直接生成一個字符串并返回&#xff08;相當于有個轉義的過程&#xff09;&#xff0c;RenderPartial方法是…

算術編碼簡單研究

算術編碼 是一種無損數據壓縮方法&#xff0c;也是一種熵編碼的方法。和其它熵編碼方法不同的地方在于&#xff0c;其他的熵編碼方法通常是把輸入的消息分割為符號&#xff0c;然后對每個符號進行編碼&#xff0c;而算術編碼是直接把整個輸入的消息編碼為一個數&#xff0c;一個…

Thinkphp5 還有這種操作?

2019獨角獸企業重金招聘Python工程師標準>>> 在 _initialize 中取出 控制器名和方法名 define(CONTROLLER_NAME,Request::instance()->controller()); define(MODULE_NAME,Request::instance()->module()); define(ACTION_NAME,Request::instance()->actio…

【R】語言第五課----畫圖

?plot#高級繪圖函數 可以完整地繪制出一張圖 ?mtcars plot(mtcars$wt) plot(mtcars[,1:2]) plot(mtcars) plot(mtcars$wt,mtcars$disp) plot(mtcars$wt,mtcars$disp,typep) plot(mtcars$wt,mtcars$disp,typel) plot(mtcars$wt,mtcars$disp,typeb) plot(mtcars$wt,mtcars$disp…

Solidworks如何將參考平面的圖形投影到某曲面上

1 畫好草圖&#xff0c;點擊曲線-分割線 2 選擇要投影的草圖和被投影的面&#xff08;那個球面&#xff09;&#xff0c;最后效果如下圖所示 3 為了獲取連續的軌跡&#xff0c;我們可以再次選擇這個草圖&#xff0c;然后在投影面中選擇平面&#xff0c;最后得到的圖形如下圖所示…

向極限挑戰:算術編碼 (轉)

向極限挑戰&#xff1a;算術編碼 (轉) http://blog.csdn.net/hhf383530895/archive/2009/08/24/4478605.aspx 我們在上一章中已經明白&#xff0c;Huffman 編碼使用整數個二進制位對符號進行編碼&#xff0c;這種方法在許多情況下無法得到最優的壓縮 效果。假設某個字符的出…

np.random.seed(0)作用

在用python時時常會看到如下代碼&#xff1a; import numpy as np np.random.seed(0) 其中np.random.seed(0)的作用是使得隨機數據可預測&#xff0c;當我們設置相同的seed&#xff0c;每次生成的隨機數相同。 如果不設置seed&#xff0c;則每次會生成不同的隨機數&#xf…

發送郵件被退回,提示: Helo command rejected: Invalid name 錯誤

我自己配置的 postfix dovecot server&#xff0c; 配置了outlook 后&#xff0c; 相同的賬號。 在有的電腦上能收發成功&#xff0c; 在有的電腦上發送郵件就出現退信。提示 Helo command rejected: Invalid name 錯誤。經過分析&#xff0c; 原來是計算機名的問題。 計算機名…

Series和DataFrame、相關性及NaN處理

pandas核心數據結構 pandas是以numpy為基礎的&#xff0c;還提供了一些額外的方法 Series series用來表示一維數據結構&#xff0c;與python內部的數組類似&#xff0c;但多了一些額外的功能。 series內部由兩個相互關聯的數組組成&#xff1a;主數組用來存放數組&#xff…

Hive謂詞解析過程分析

where col1 100 and abs(col2) > 0在Hive中的處理過程 where過濾條件稱為謂詞predicate。 以上where過濾條件在經過Hive的語法解析后&#xff0c;生成如下的語法樹&#xff1a; TOK_WHERE AND TOK_TABLE_OR_C…

算術編碼(Arithmetic Coding)源代碼

Ian H. Witten、Radford M. Neal和John G. Cleary在1987年發表了一篇啟發性的論文。論文中描述了一種基于整數運算的通用算術編碼器&#xff0c;而且還給出了由計算錯誤導致的效率低下的分析。以下源代碼來自于這篇論文&#xff1a;《基于算術編碼的數據壓縮》&#xff08;Arit…

pandas讀寫各種類型數據

read_X()通常是pandas模塊下的&#xff0c;to_X()是dataframe的方法 CSV 讀取 使用pandas.read_csv()方法&#xff0c;返回的是一個dataframe csv默認是以"&#xff0c;"分割的 csv文件內容 1、read_csv()默認以第一行數據作為標題 2、調用dataframe的head()方法…