?? 理解繼承是理解面向對象程序設計的關鍵.在Java中,通過關鍵字extends繼承一個已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類).在Java中不允許多繼承.code:
class Animal
{
?int height,weight;
?void eat()
?{
??System.out.println("Animal eat!");
?}
?void sleep()
?{
??System.out.println("Animal sleep!");
?}
?void breathe()
?{
??System.out.println("Animal breathe!");
?}
}
class Fish extends Animal
{
?
}
class DoMain
{
?public static void main(String[] args)
?{
??Animal an=new Animal();
??Fish fn=new Fish();
??
??an.breathe();
??fn.breathe();
??fn.height=30;
??fn.weight=20;
?}
}
Result:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal breathe!
Animal breathe!
(這說明派生類繼承了父類的所有方法和成員變量.)
方法的覆蓋(override)
在子類中定義一個與父類同名,返回類型,參數類型均相同的一個方法,稱為方法的覆蓋,方法的覆蓋發生在子類與父類之間.
code:
class Animal
{
?int height,weight;
?void eat()
?{
??System.out.println("Animal eat!");
?}
?void sleep()
?{
??System.out.println("Animal sleep!");
?}
?void breathe()
?{
??System.out.println("Animal breathe!");
?}
}
class Fish extends Animal
{
?int weight,height;?? //隱藏了父類的weight,height;
?void breathe()? //override method breathe()
?{
??super.breathe();? //用super調用父類的構造方法
??System.out.println("Fish bubble");
?}
}
class DoMain
{
?public static void main(String[] args)
?{
?//?Animal an=new Animal();
??Fish fn=new Fish();
??
??an.breathe();
??fn.breathe();
??fn.height=30;
??fn.weight=20;
?}
}
輸出結果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal breathe!
Fish bubble
特殊變量super
* 使用特殊變量super提供對父類的訪問
* 可以使用super訪問父類被子類隱藏的變量或覆蓋的方法
* 每個子類構造方法的第一條語句都是隱含的調用super,如果父類沒有這種形式的構造函數就會報錯.
code:
class Animal
{
?int height,weight;
?Animal()
?{
??System.out.println("Animal construct");
?}
?void eat()
?{
??System.out.println("Animal eat!");
?}
?void sleep()
?{
??System.out.println("Animal sleep!");
?}
?void breathe()
?{
??System.out.println("Animal breathe!");
?}
}
class Fish extends Animal
{
?Fish()
?{
??System.out.println("Fish construct");
?}
?void breathe()? //override method breathe()
?{
??System.out.println("Fish bubble");
?}
}
class DoMain
{
?public static void main(String[] args)
?{
??//Animal an=new Animal();
??Fish fn=new Fish();
??
??//an.breathe();
??//fn.breathe();
??//fn.height=30;
??//fn.weight=20;
?}
}
輸出結果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal construct
Fish construct
? 蘇東坡和佛印和尚是好朋友,但二人喜歡言語相諷,各不相讓,經常是蘇東坡占下風.
??有一次,蘇東破問佛印說:
??"你看我像什么?"
??"我看你像尊佛."佛印說.
??蘇東破暗喜,隨即就問佛印:
??"那你可知道我看你像什么呢?"
??"像什么?"
??"像一堆屎!"
??佛印語塞.蘇東坡哈哈大笑.
??回家后,蘇東坡面帶笑容哼哼嘰嘰.
??蘇小妹見狀問道:
??"哥哥,什么事情這么高興呀?"
??"哼,佛印這次總算載我手里了!"蘇東坡得意的說.
??問明原委,蘇小妹大叫道:
??"哥哥,這次你輸得更慘了!"
??"為什么?"蘇東坡急忙問.
??蘇小妹說:
??"因為心中有什么,外在才看到什么.心中有佛,看別人才是佛;心中有屎,看別人就是屎!"
?? E=MC^2,這是偉大的愛因斯坦著名的質能公式:能量等于質量乘以速度的平方。
? 人與人在質量,能力(智商)上的差別是很小的,也就是說“M”基本上是個常數。因此,人能發出的能量(success),就取決于其速度(C^2)。
?? 時間就是勝利。
??? 競賽以快取勝,搏擊以快打慢,軍事先下手為強,商戰從"大魚吃小魚"到"快魚吃慢魚"。跆拳道要求心快,眼快,手快;中華武學一言以蔽之,百法有百解,唯快無解!
??? 大而慢等于弱,小而快可變強,大而快王中王!快就是機會,快就是效率,快就是瞬間的"大",無數的瞬間構成長久的"強"。
??? 競爭的實質,就是在最快的時間內做最好的東西。人生最大的成功,就在于在最短的時間里達到最多的目標。質量是"常量",經過努力都可以做好以至于難分伯仲;而時間,永遠是"變量”:一流的質量可以有很多,而最快的冠軍只有一個-任何領先,都是時間的領先!
? 我們慢,不是因為我們不快,而是因為對手更快。
? 盛田昭夫說:
? "如果你每天落后人家半步,一年后就是一百八是三步,十年后即為十萬八千里。"
?? 在非洲的大草原上,一天早晨,曙光剛剛劃破夜空,一只羚羊從睡夢中猛然驚醒。
? "趕快跑!" 它想到,“如果慢了,就可能被獅子吃掉!“
?? 于是,起身就跑,向著太陽的方向飛奔而去。
?? 就在羚羊醒來的同時,一只獅子也醒了。
? ”趕快跑“,獅子也想到,”如果慢了,就可能被餓死!“
?? 于是,起身就跑,也向著太陽的方向飛奔而去。
?? 誰快就誰贏,誰快就誰生存。一個是自然界獸中之王,一個是事草的羚羊,等級差異,實力懸殊,但生存卻面臨同一個問題-如果羚羊快,獅子就餓死;如果獅子快,羚羊被吃掉。
? 貝爾在研究電話時,另一個叫格雷的人也在研究。兩人同時取得突破。但貝爾在專利局贏了-比格雷早了兩個鐘頭。當然,他們兩人當時是不知道對方的,但貝爾就因為這120分鐘而一舉成名,譽滿天下,同時也獲得了巨大的財富。
? 誰快誰贏得機會,誰快誰贏的財富。
? 全世界的目光只會聚焦在第一名的身上。冠軍才是真正的成功者。第一名后面,都是輸家。
? 時間的"量"不變,但"質"卻不同。關鍵時刻一秒值萬金。
??? 從今天開始從零學習JAVA,希望可以認識到更多的朋友,可以讓自己的JAVA之路走得更為順利一些!買了幾本書來看也聽了幾接課,覺得JAVA很吸引我,我想我可以走得更遠的.自信是最重要的.
??? OOP(Object Oriented Programming)描述的是對象與對象之間的相互作用.聽老師將面向過程與面向對象的最大區別是: 過程化程序設計先確定算法,再確定數據結構,再確定運算.面向過程編程,習慣于先建立數據結構存放數據并定義方法(函數)來操作數據;而面向對象的則是構建一個模型,將數據與方法組織在一起.
??? 我們可以把現實世界的事物抽象為對象.對象一般都有兩個特征:狀態(Status),行為(Behavior).軟件的對象概念是由顯示世界對象抽象而來.把現實世界的狀態保存軟件對象的變量中;現實世界對象的行為通過軟件對象的方法(函數)來實現.
??? 我們把相似的對象劃分成一個類.在軟件中類就是一個模板,它定義了通用于一個特定種類的所有對象的狀態(變量)和行為(方法).類是創建對象的模板,對象是類的實例.
????面向對象編程的難點在于思路的轉變.我們通常習慣與考慮解決問題的方法,而不是抽象成對象再去解決它.
?類的構造方法
* 構造方法的名字和類名相同,并且沒有返回值.
*?構造方法主要用于定義類的初始化狀態.
*?我們不能直接調用構造方法,必須通過new關鍵字來自動調用,從而創建類的實例.
* Java的類都要求有構造方法,如果沒有定義構造方法,Java編譯器會提供一個缺省的構造方法,也就是不參數的構造方法.
方法的重載(overload)
?重載構成的條件:方法的名稱相同,但參數類型或參數個數不同,才能構成方法的重載.
code:
class Point
{
?int x,y;
?/*
? *帶參數的構造方法和不帶參數的構造方法就構成了方法(函數)的重載
?*/
?Point(int a,int b)
?{
??x=a;
??y=b;
?}
?Point()
?{
??
?}
?void output()
?{
??System.out.println(x);
??System.out.println(y);
?}
?public static void main(String[] args)
?{
??//調用不帶參數的構造方法
??//Point p=new Point();
??//pt.x=10;
??//pt.y=20;
??//p.output();
??Point p1=new Point(3,3); //調用帶參數的構造方法
??p1.output();
?}
}
特殊變量this
* this變量代表對象本身
* 當類中有兩個同名變量,一個屬于類(類的成員變量),一個屬于某個特定的方法(方法中的局部變量),使用this區分成員變量和局部變量.
* 使用this簡化構造函數的調用
code:
class Point
{
?int x,y;
?/*
? *帶參數的構造方法和不帶參數的構造方法就構成了方法(函數)的重載
?*/
?Point(int a,int b)
?{
??x=a;
??y=b;
?}
?Point()
?{
??this(1,1);
?}
?void output()
?{
??System.out.println(x);
??System.out.println(y);
?}
?/*output()方法定義的形參與成員變量同名了,
?*那么在output()里就看不到成員變量的x,y了,它被隱藏了.
?*/
?void output(int x, int y)
?{
??this.x=x;
??this.y=y;
?}
?public static void main(String[] args)
?{
??Point pt=new Point(3,3);
??pt.output(5,5);
??pt.output();
?}
}
一個類所有的實例(對象)調用的成員方法在內存中只有一份拷貝,盡管在內存中可能有多個對象,而數據成員在內的沒個對象中都存在著一份拷貝.this變量允許相同的實例方法為不同的對象工作.每當調用一個實例方法時,this變量被設置成引用該實例方法的特定的類的對象.方法的代碼接著會與this所代表的對象的特定數據建立關聯.