面向對象思想----不看後悔!
前言:
整理這份資料的目的是爲了幫助朋友們可以更直觀的理解面向對象的編程。讓後來者可以少走一些彎路。但其中難免有許多漏洞及錯誤,也還請前輩提出寶貴的更改意見,畢竟交流會讓咱們不斷的進步。
技術是突飛猛進的,他不會等待你的成長。技術要拿出來於別人交流,本身學是本身主觀意識上的理解,有對有錯!交流會讓進步變得更快。我認爲若是計算機 的體系結構不發生革命性的變化,咱們如今所應用的程序語言也就百變不離奇蹤了!學編程學的是什麼?思想!精通一門編程語言(最好是面向對象的語言)後再去 搞其餘的編程語言,你會發現過程是如此的行雲流水!爲何?你已經把編程的思想掌握了,再去學其餘的,無非是學習一種新的語法格式了。
我在這裏並非和你討論怎麼去用C++或JAVA,也不是和你討論怎麼去學他們,我要和你討論的是怎麼去理解面向對象。其中主要會涉及到「類、對象、 繼承、屬性、方法、靜態、重載、隱藏、重構、聲明、定義、初始化、賦值等」其中有許多相關技術我只會一代而過,讓你有一種到此一遊的意味我就達到目的了, 而更詳細的技術內幕,就請參考其餘相關書籍而深刻研究吧!由於我只是在和你探討如何去更好的理解面向對象!
如何去提升效率?重複使用資源,把別人的東西拿來就用。這是很不錯的主意!而對於你來講,最大的資源就是信心以及積極性!好,打起精神來,讓咱們一同到面向對象的編程中去尋幽訪勝吧!
注:文章中全部程序實例我都使用JAVA寫的,固然在C++中也就大同小異了了,不一樣的地方我會指出!
注:文章中的正文文字用黑色,說明文字用藍色,強調文字用橙色,批改文字用紅色!
正文:
1.基本概念:
1.1 類與對象的初探
要我說,不管是面向過程的語言也好,面向對象的語言也罷,我首先要給他講的都是類和對象!--------「這個世界是由什麼組成的?」這個問題若是 讓不一樣的人來回答會獲得不一樣的答案。若是是一個化學家,他也許會告訴你「還用問嘛?這個世界是由分子、原子、離子等等的化學物質組成的」。若是是一個畫家 呢?他也許會告訴你,「這個世界是由不一樣的顏色所組成的」。……呵呵,衆說紛紜吧!但若是讓一個分類學家來考慮問題就有趣的多了,他會告訴你「這個世界是 由不一樣類型的物與事所構成的」好!做爲面向對象的程序員來講,咱們要站在分類學家的角度去考慮問題!是的,這個世界是由動物、植物等組成的。動物又分爲單 細胞動物、多細胞動物、哺乳動物等等,哺乳動物又分爲人、大象、老虎……就這樣的分下去了!
如今,站在抽象的角度,咱們給「類」下個定義吧!個人意思是,站在抽象的角度,你回答我「什麼是人類?」首先讓咱們來看看人類所具備的一些特徵,這個 特徵包括屬性(一些參數,數值)以及方法(一些行爲,他能幹什麼!)。每一個人都有身高、體重、年齡、血型等等一些屬性。人會勞動、人都會直立行走、人都會 用本身的頭腦去創造工具等等這些方法!人之因此能區別於其它類型的動物,是由於每一個人都具備人這個羣體的屬性與方法。「人類」只是一個抽象的概念,它僅僅 是一個概念,它是不存在的實體!可是全部具有「人類」這個羣體的屬性與方法的對象都叫人!這個對象「人」是實際存在的實體!每一個人都是人這個羣體的一個對 象。老虎爲何不是人?由於它不具有人這個羣體的屬性與方法,老虎不會直立行走,不會使用工具等等!因此說老虎不是人!
因而可知-------類描述了一組有相同特性(屬性)和相同行爲(方法)的對象。在程序中,類實際上就是數據類型!例如:整數,小數等等。整數也有 一組特性和行爲。面向過程的語言與面相對象的語言的區別就在於,面向過程的語言不容許程序員本身定義數據類型,而只能使用程序中內置的數據類型!而爲了模 擬真實世界,爲了更好的解決問題,每每咱們須要建立解決問題所必需的數據類型!面向對象編程爲咱們提供瞭解決方案。
1.2 內置數據類型與函數:
計算機程序在存儲數據時必須跟蹤3個基本屬性爲:
1. 信息存儲在何處;
2. 存儲的值是多少;
3. 存儲的信息是什麼類型的;
讓咱們來看看編程語言的內置數據類型都有哪些!(呵呵,這個不大好說,由於每門語言都有本身獨特的數據類型,但這畢竟是少數,好比在JAVA中有 byte類型的數據,而在C++中就沒有,但願你能觸類旁通!)好比整數」int 」,浮點類型的數據」float」!字符串」String」,以及數組還有結構體等等。然而在寫程序的時候,根據須要咱們會建立一個類型的變量或常量,例 如:因爲咱們須要建立一個整形的變量i爲5,咱們就能夠這樣作,int i = 5;而根據須要我頗有可能改變i的值,也就是重新給它賦值,好比讓它等與6,就能夠在所需的地方改爲i = 6;由此咱們知道,在「值」上能夠發生變化的量就叫變量。不會發生變化的量就叫作常量了,在C++中用count關鍵字來聲明,而在JAVA中則使用 final關鍵字來聲明。因爲不一樣語言的聲明格式不同,這裏就不作一一介紹了,詳細的內容清查閱相關書籍!
在這裏咱們主要討論一下函數,咱們能夠把函數想象成一個「實現某種特定功能的黑匣子」-------這個功能是由你來設定的,舉個例子來講:如今我問 你「2+3等於多少」?我相信你能很快的回答我等於5。讓咱們來分析分析這句話包含什麼信息!首先我要把你的大腦想象成是一個黑匣子,我並不知道也沒有必 要知道你的大腦是如何工做的(也就是怎麼運算的),我關心的只是我傳給你的是什麼信息?你對信息作了哪些處理? 以及你返回給個人是什麼信息?須要提醒你一下的是每一個方法都會返回一個信息給調用者的,除了構造函數外(稍候我會做詳細的介紹)。我如今須要把本身看成是 一名程序員,而你呢?固然就是計算機了!計算便可沒有人那麼聰明,它只會按事先約好的特定的格式運行,我想讓它具備如上所述的功能,我就要先定義這個黑匣 子!首先我要告訴這個黑匣子會有兩個整數值給你(這就是所謂的參數,是程序員須要給黑匣子的信息),而後就要定義這個黑匣子內部實現這兩個整數相加的運算 (這就是黑匣子對數據所作的加工,根據須要,你能夠作任何的加工。)。最後再標註它返回給我一個一樣是整型的數值(這是黑匣子返回給程序員的信息)。一個 函數就這樣定義完了,讓咱們來看看書寫格式:
int addnum(int x,int y){
return x+y;
}
具體的含義是這樣的:
int /*返回值類型*/ addnum /*方法(黑匣子)名稱*/ (int x,int y/*傳入的參數*/){
return x+y; /*內部是想方法(實現相加運算,)並用return返回給調用者結果*/
}
首先請注意上明的「return」語句!return 關鍵字的含義是向調用者返回緊跟在它後面的信息!就像上面同樣,由於我問你,你纔會回答我,若是我不問你,你就不用回答個人!在計算機中也同樣,定義好這 個函數在哪裏調用呢?我只能告訴你,哪裏須要就在哪裏調用!固然,你能夠根據須要去更改參數、返回值以及內部實現,具體到如何定義如何調用你只好去參考相 關的資料了!在這裏我只是給你一個思想!
有時你會遇到這樣的問題,我讓你記住,個人年齡是20歲!從字面上理解,你並無給我返回信息!然而事實上,你確實給我返回了信息,信息的內容是「無信息,也就是無返回值類型void」。具體的程序以下:
int myAge = 0;
int a=20;
void remAge(int a){
myAge=a;
}
具體的函數說明以下:
int myAge =0; //定義並初始化個人年齡爲0;
int a=20; /*定義變量a等於20*/
void /*返回值類型爲無返回值類型*/ remAge /*函數名稱*/(int a /*傳入的參數*/){
myAge=a; //內部實現方法,注意,沒有return返回!!!
}
關於函數的話題還有不少不少,這裏就不一一介紹了,個人目的是讓你知道函數是怎麼一會事兒!爲下面的討論做鋪墊!
1.3 指針以及引用:
指針及引用是在C++中有的,JAVA中沒有。JAVA中取消了對內存的操做,隨之而來的事也取消了操做符重載的操做。不過在稍候我仍是會介紹一些操 做符重載的功能等。引用主要仍是用在函數參數的傳遞上。因此我在這裏就不作過多的介紹了。他們很實用,有興趣的同窗能夠參閱C++相關書籍。
1.4 運算符及控制語句:
仍是本身看看相關書籍吧,這裏就再也不熬述了!
2.深刻探討面向對象:
2.1「類型」的內部細節:
有了上面的知識,咱們如今就能夠深刻的挖掘類的內部實現了。全部的知識點我都會圍繞着類與對象展開,在此以前,我但願你可以確信對以上所介紹的基本內容已徹底掌握了!
是的,面向對象的編程語言最大的特點就是能夠編寫本身所需的數據類型,以更好的解決問題。我想我必需要幫你搞清楚「類,對象,屬性,方法它們之間的關 系」!就像我前面所說的,人這個「類」是什麼也作不了的,由於「人類」只是一個抽象的概念,它不是實實在在的「東西」,而這個「東西」就是所謂的對象。只 有人這個「對象」才能去工做。而類呢?類是對象的描述!對象從類中產生出來!此時,對象具備類所描述的全部的屬性以及方法。-------必定要理解這句 話!!!
也許你已經有些不知所措了,不要緊!好好的回味一下,我再舉個例子!例如電視機,電視機都有工做原理圖,那麼什麼叫電視機呢?只要它可以實現工做原理圖的 全部功能的物體,咱們都叫它電視機。你想一想是否是這麼一回事兒?但是,電視機原理圖是不能工做的,也就是這個原理圖不能收看節目,只有電視機這個「實體 ——即所謂的對象」才能收看節目,也就是說,從類生成出對象以後纔算得上是真正的有意義!才能開始工做。此時,電視機擁有電視原理圖所描述的全部的屬性及 方法!明白了吧,呵呵!
我先前介紹過,類是屬性與方法的集合。而這些屬性與方法能夠被聲明爲私有的(private),公共的(public)或是受保護(protected)的,他們描述了對類成員的訪問控制。下面我分別作一下介紹:
1. 公共的(public):把變量聲明爲公共類型的以後,那麼就能夠經過對象來直接訪問,一切都是暴露無遺的!也就是說,你的信用卡密碼別人也可以直接獲得。
2. 私有的(private):若是把變量聲明爲私有的狀況就好多了,想要獲得個人信用卡密碼,對象必需要調用專用的方法纔可以獲得。
3. 受保護的(protected):介紹繼承時再討論。
4. 默認控制訪問符(friendly)://JAVA中有而C++中沒有。
爲了實現數據的封裝,提升數據的安全性,咱們通常會把類的屬性聲明爲私有的,而把類的方法聲明爲公共的。這樣,對象可以直接調用類中定義的全部方法,當對 象想要修改或獲得本身的屬性的時候就必需要調用以定義好的專用的方法纔可以實現。你想一想,你會把你的信用卡密碼公佈出來嘛?呵呵!因此,咱們提倡的是: 「對象調方法,方法改屬性」;
2.2經過實例看內存分配:
說了這麼多,讓咱們來看一個實例吧!好比:如今咱們要編寫某家公司員工管理系統,你認爲最合適的數據類型是什麼?我認爲是員工我的!可是在面向過程的 語言中,這樣作是不容許的,由於它只能使用語言中的內部數據類型!而員工不在這個內部數據類型以內!也許有人會說能夠用C語言中的struct,好注意! 畢竟它是類的基礎!若是你之前是一名面C或B的程序員,請你忘掉這些,讓咱們一塊兒看看如何用類來實現這一切吧!
某家公司的員工是人類的一個特殊羣體,它除了具有人類的全部特性與方法外,它還有額外的特性與方法,好比她有她的工資、信用卡密碼、做息時間等等,這 些特性以及工做內容,工做量等等這些方法。而在計算機中咱們該如何定義這個類呢?下面我將寫出它的格式,讓你看看在計算機中它是張什麼樣子的!
/*在此我須要再次聲明的是,我用的是JAVA格式,在語法格式上它與C++大不相同!許多細節以及內部操做都有諸多區別,而在思想上確實大同小異的*/
//employee.java
public class employee{
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午飯
//……等等
public void heater(){ //這個方法是用來加工員工的午飯
lunch = true;
}
public void setName(String a){ //這個方法是修改員工的姓名
name= a;
}
public String getName(){ //這個方法是獲得員工的姓名
return name;
}
//……等等
}
這樣咱們就定義完了咱們所須要的數據類型。如今,讓咱們來看看它可以幹什麼以及怎麼工做!
我想要作的是,工做室裏有一個光桿司令叫「jingwei」,我修改它的名字後對對它進行輸出,看看我是怎麼作的吧!
注意:請仔細觀察對象是如何調用方法的,它使用了「.」操做符!事實上是這樣的,對象調用公共的屬性或方法時就會使用「.」操做符。
然而在C++中,若是定義一個同類型的指針,該指針調用此對象的方法時,就會使用「->」操做符。更詳細的內容清參閱相關書籍了!
//workstation.java
import java.awt.Graphics;
import java.applet.Applet;
public class workstation extends Applet{
private employee jingwei ; //對象的聲明,此時並不分配內存!
public void init(){
jingwei = new employee(); /*此時建立對象會調用構造函數,稍候介紹*/
jingwei.setName(「jw」); //設置個人名字
}
public void paint(Graphics g){
g.drawString("my age is "+jingwei.getName(),10,10);//顯示個人年齡
}
}
輸出結果是:
my name is jw
這串字符串是在輸出窗口的x座標軸爲10 px , y座標軸爲10 px的位置。
我如今要作的是,把上面的程序作個大解剖,讓你可以看清楚它究竟是怎麼一回事兒!(我可不時帶你去看裏面的彙編,呵呵,那個我也不會:)
首先仍是來看看咱們自定義的數據類型employee,在應用的時候它和int類型的數據沒什麼兩樣,同樣的須要建立變量(對象),只不過前者是咱自 己定義的,然後這是它內置的。Employee這個類中有許多屬性,也有許多方法。而此時,咱們不能直接用咱們所建立出來的對象調用它的屬性進行修改。因 爲它是private受保護類型的!我要想修改個人姓名我就要用對象調用setName()這個方法,而我想獲得個人姓名就要調用getName()這個 方法。咱們徹底是按照航線來行走的,這個航線就是「對象調方法,方法改屬性」
好的,我真的相信你已經明白了這是怎麼一回事兒了!呵呵!仰起航帆,繼續前行!
如今讓咱們一塊兒來看看workstation這個類。這是個主類,和C++中的main()函數的味道差很少。其中,在JAVA中,一個文件只容許有並且必須有一個主類,這個主類用public來聲明!他就跟C++中必需要有一個main()函數是同樣的。
讓咱們來看看這個類中的第一條語句!private employee jingwei ;這條語句的做用是聲明一個employee的對象jingwei(在C++中就不用聲明瞭)。我想要和你說的是「聲明」與「定義」之間的區別。聲明只是 告訴計算機將要有這樣的一個變量(對象),在內存中它並不爲這個變量(對象)分配內存!而只有在定義的時候纔會給這個變量(對象)分配內存。(須要說明一 下的是init()方法是完成初始化操做的,在此處定義對象,爲對象分配內存。start()方法用來啓動瀏覽器的主線程,paint()方法來顯示 Apple的界面。這些是Applet程序所需的,至於Application程序就不須要了,固然了,C++中也不須要他們。關於他們的詳細內容清參閱 相關書籍)
緊接着就開始定一個對象了,對jingwei這個對象進行操做纔會有實際的意義。千萬不要有這種想法:「試圖對類進行操做!」就像前面我說的,電視機 原理不能看電視同樣!這是毫無心義的!看這條語句jingwei = new employee();它的意思就是定義一個employee類型的對象jingwei。此時,我想告訴你的是:「jingwei這個對想擁有了些什 麼」。它擁有了類所描述的全部的屬性及方法。下面我一一給你列出來:
/*全部的employee對象都擁有這些屬性。每建立一個對象就會重新分配一塊內存來存放相應對象的這些屬性。個人意思是每一個對象都有本身「獨特」的一份*/
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午飯
/*全部的employee對象都擁有這些方法。但在內存中只有一份*/
public void heater(){ //這個方法是用來加工員工的午飯
lunch = true;
}
public void setName(String a){ //這個方法是修改員工的姓名
name= a;
}
public String getName(){ //這個方法是獲得員工的姓名
return name;
}
/*可是,實際上在建立jingwei這個對象時計算機只給這個對象的全部的屬性分配了內存,而並無給方法分配內存。方法只有一個,是屬於全部的對象的,因此不管建立了多少個對象,計算機只會爲一個方法分配一塊內存。*/
我想我仍是舉個例子吧,否則你非暈倒不可。呵呵!
看我這條語句「private boolean lunch;」公司無論午飯,每一個員工都須要帶飯。咱們如今這樣想,公司的空間是全部的內存容量,你的辦公桌就是計算機中的內存中的一部分(每一個員工都有 一份,是在建立對象時分配的)。你把午餐帶到了公司,放在了你的辦公桌上。「午餐」佔據了你的辦公桌的一角(佔了你本身「對象」的一塊內存容量)。這份午 飯只屬於你本身,一樣別人的也只屬於她本身!因此每一個員工(對象)都須要一快空間(內存)來存放本身的午飯(屬性)。在計算機中也是這樣的,每建立一個對 象,就會在內存中重新分配一塊內存來放「午飯——lunch」這個屬性(對象所擁有的全部的屬性)。
計算機只會爲對象的屬性分配內存。由於每一個對象的都不同!就像你往公司帶的午餐和我往公司帶的午餐不同是一個道理!但方法就不一樣了。早晨帶的飯中 午就涼了,你須要用微波爐來加熱。微波爐可不用你帶,公司就有(只佔公司的一塊空間),它放在了午飯桌上。你想一想,微波爐屬於誰的?它屬於全部員工的!因 爲每一個員工均可以用它。而沒必要每一個員工都帶一份。因而可知,每一個員工(對象)都有一份午餐(屬性),但全部的員工(對象)只一個微波爐(方法)。全部的員 工(對象)均可以經過這個微波爐(方法)來改變本身午飯(屬性)的冷熱狀態。異曲同工!在計算機中也就是這樣,方法只有一份,供全部的對象使用!而屬性是 每一個對象一份,由於每一個對象的都不同。別和我說你還不明白,否則我會撞牆的,呵呵:)
2.3深刻探討函數:
2.3.1構造函數、默認構造函數、 缺省構造函數
對於上面的實例,它已經能完成絕大部分工做了,但它仍是不完善的,還有許許多多的細節等到咱們去完善!也許有的同窗已經注意到了,當我建立完 「jingwei」這個對象時,這個對象的全部的屬性都是空的,也就是說:這個對象的姓名是未定的、年齡是未定的、性別是未定的、薪水是未定的、午飯也是 未定的。而咱們想把這些屬性都添加上去,就還要用對象調用相應的方法,去一個個修改!天啊,這簡直是太麻煩了!有沒有什麼好方法可以在咱們建立對象的同時 就完成了對屬性賦值的操做呢?哦不,應該說是對屬性的初始化呢?固然沒問題了,這就須要所謂的構造函數!
構造函數是類中最特殊的函數,它與析構函數的功能正好相反!
從特徵上來講:1.它是編程語言中惟一沒有返回值類型的函數。
2.它的名稱與類的名稱必需要徹底相同。
3.它必須被聲明爲公共(public)的類型
4,能夠對構造函數進行重載。
5.它在建立對象是自動被調用。
從功能上來講:1.它是對類中的屬性進行初始化。
其實,對於上面的程序來講咱們沒有本身定義構造函數。可是,在這種狀況下,系統會自動爲咱們定義一個「默認構造函數」。他會把數值變量自動賦值爲0, 把布爾行變量賦值爲false等等(但在C++中,默認構造函數不初始化其成員)。若是程序員定義了構造函數,那麼系統就不會再爲你的程序添加一個缺默認 造函數了。(在這裏,咱們提倡的是本身定義構造函數,而不是用系統的默認構造函數)
仍是看個實例吧!這樣比較清楚一些!
//employee.java
public class employee{
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午飯
//……等等
public employee(){ //這個就是「默認」構造函數
name = 「jw」; //設置員工姓名
age = 20; //設置員工年齡
sex = 「M」; //設置員工性別
emolument = 100; //設置員工薪水
lunch = false; //設置員工午飯
}
public void heater(){ //這個方法是用來加工員工的午飯
lunch = true;
}
//……等等
};
這樣,在咱們建立「jingwei」這個對象的同時,它的全部的屬性也被初始化了!顯然,這大大的提升了工做效率,可是,它仍是不符合要求。想一想看, 若是咱們如今建立這個類型的第二個對象的時候會發生什麼事情?告訴你,除了對象的「名」(這個名稱不在是對象屬性中的名稱,而是對象自己的名稱)不同 外,其全部的「屬性值」都同樣!好比:如今咱們建立第二個對象flashmagic,然而我會發現這個對象的全部的屬性和jingwei這個對象的全部的 屬性徹底相同。而咱們只能在用對象的方法去改變着寫屬性了!很顯然,這種方法不大好!咱們須要一種方法在建立對象的時候爲對象的屬性賦予「咱們想要的 值」。
相信你也看到了,默認構造函數就顯得無能爲力了。咱們須要的是帶參數的構造函數,在建立對象時,咱們把參數傳給構造函數,這樣就能完成了上述的功能!口說無憑,仍是來看個實例吧:
//employee.java
public class employee{
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午飯
//……等等
public employee(String n,int a,char s,float e,boolean l){ //看這個構造函數
name = n; //設置員工姓名
age = a; //設置員工年齡
sex = s; //設置員工性別
emolument = e; //設置員工薪水
lunch =l; //設置員工午飯
}
public void heater(){ //這個方法是用來加工員工的午飯
lunch = true;
}
//……等等
};
這樣一來,在建立對象的同時咱們就能夠給他賦予咱們想要的值,很顯然,這可就方便多了。哦,對了!尚未告訴你怎麼建立呢!哈哈,往前翻幾頁你會看到這句話:
jingwei = new employee();這是建立一個對象,而咱們把它改爲
jingwei = new employee("jingwei",20,'M',100,false);這樣一來,全部的工做都完成了,呵呵!(在建立對象的同時賦予了咱們想要的「初值」)
2.3.2重載構造函數:
我仍是先把概念給你吧,讓你有個認識,隨後咱們在進行論述。
在JAVA中:
1. 函數重載是一個類中聲明瞭多個同名的方法,但有不一樣的參數個數和參數類型。
2. 函數重構是指在子類中聲明與父類同名的方法,從而覆蓋了父類的方法。重構解決了子類與父類的差別問題。(在討論到繼承時我會詳細說明)
在C++中:
1. 數重載的概念同樣。
2. 重構的概念可就不同了,C++中功能更爲龐大的虛函數。更詳細內容這裏就不錯過多介紹了!
其實關於重載的概念你並不陌生,在編程中相信你也接觸過。呵呵!讓咱們來舉個操做符重載的例子你就會明白了,(JAVA中不支持這個功能)咱們定義三個整數變量:
int i1=2, i2=3,i3=0;
i3 = i1 + i2;
此時i3=5;加號實現了兩個數相加的運算功能。然而咱們如今要定義三個字符串變量:
String str1=」jing」, str2=」wei」,str3=」」;
str3 = str1 + str2;
此時str3 = 「jingwei」;加號實現了兩個字符串相加的運算功能。一樣是加號,既能夠把兩個整型的變量加在一塊兒,也能夠把兩個字符串類型的變量加在一塊兒。同一個 操做符實現了不一樣的功能------這就是所謂的操做符重載(嘿嘿,我說你必定見過吧:)!不就好像是漢語中的一詞多意同樣!我須要說明一下的是,C++ 中的操做符重載可沒有這麼簡單。好比,咱們能夠對兩個自定義類型的對象進行相加的運算,進行賦值的運算。這樣書寫簡潔明瞭,並且很是實用。固然,關於操做 符重載的話題太多了,有興趣再看看書吧!
咱們把操做符的話題在轉到函數上來,咱們一直強調的是「對象調方法」------對象其實調的是方法的「名稱」。而咱們如今要對方法進想重載,也就是 定義多個相同名稱的函數,這樣計算機在調用的時候不會混淆嘛?我想應該不會的,呵呵,由於僅僅是函數名稱相同,而咱們在調用函數時會把參數傳遞給他的。既 是沒有參數也是一種參數傳遞參數的信息(信息爲無參數)!然而因爲參數類型、參數數量、返回值類型不一樣咱們就能夠對相同名稱的函數進行區分java