老王的JAVA基礎課:第5課 物件導向
老王的JAVA基礎課:第5課 物件導向
版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
本文連結:https://blog.csdn.net/u011580177/article/details/106559907
收起
JAVA物件導向基礎概念
在JAVA世界中萬物皆物件,我們在開發中都是對各種物件做呼叫、修改與組合。一個java程式可以認為是一系列物件的組合,而一個物件又來自於類,那麼什麼是類?我們可以簡單理解類是一類事物的基礎模板。我們以一張圖來學習類和物件的關係以及方法和變數的基礎概念。
在生物課上都學過“界門綱目科屬種”的分類法,現在借用這種方式舉例。假如有一個“鳥”類,它定義了這個鳥的行為和屬性,鳥都有飛行和進食的行為,也存在身高體重等屬性。而“鳥”只是一個總稱並不是某種具體的鳥,它是百靈鳥、喜鵲、鸚鵡的更粗粒度的說法,也可以說“鳥”這個父類是其他三種鳥類的抽象 ,其飛行和進食的方法都繼承自“鳥”類,如“鸚鵡”類在這個基礎上可以有更加個性化的行為,比如“說話”。只需要在“鸚鵡”類內定義“說話”方法就實現了全部能力。這就是繼承。
我們有了“百靈鳥”等個性化的類,可以藉此來生成各種各樣的“百靈鳥”物件,比如百靈鳥1體重為200克,百靈鳥2的體重為150克等等。體現了Java的多型特性。下面來總結:
類:定義了事物的行為和某些固有屬性或狀態
物件:以類為基礎構建,是一個類的例項,百靈鳥派生自“鳥”類,它有飛行和進食的能力,也有自身身高體重等屬性,每個物件在記憶體中都是獨立的。
方法:“鳥”類有飛行和進食的行為,這就是類的方法,派生出的物件也會獲得類的方法,一個類可以有多個方法。
變數:也即變動的量,百靈鳥體重與喜鵲體重是同一個變數但是是不同的值。每個物件都擁有其獨立的變數,如百靈鳥與喜鵲同屬鳥類,但其各自的變數毫不相干。
繼承:一類事物可以以更高層次的事物為基礎繼承而來,可以讓事物出現層級,如“界門綱目科屬種”。
多型:同一個行為具有不同的表現形式,比如鸚鵡和百靈鳥都會飛,但是鸚鵡飛不高,百靈鳥可以飛得很高。
封裝:我們可以將鳥的一系列行為和熟悉都隱藏在“鳥”類中,從而保護“鳥”類中的方法和屬性不會被破壞,也可以隱藏函式的具體實現細節。
過載(Overload):在一個類裡面,方法名相同而引數個數不同,返回型別可以相同也可以不同。
重寫(Override):在子類中定義和父類中完全相同的方法,此時子類的方法將會覆蓋父類的方法,帶來了可以個性化實現細節的靈活性。
對於過載和重寫我們暫時瞭解概念即可,在後面的章節我們會詳細講這兩種特性的使用和區別。
構造方法
構造方法是一類特殊的方法,它用來告訴想建立某個類的物件的人“你應該如何建立這個類的物件”,比如“鳥”類有一個沒有引數的構造方法還有一個帶引數的構造方法。注意建構函式沒有返回型別,不需要編寫。
/** 無參構造方法 */
public Bird(){}
/** 帶參構造方法 */
public Bird(int height, int weight){
//以下兩行表示將你傳入的身高體重賦值給鳥的實際物件,
//在物件構造完畢時,就擁有了這兩個屬性
this.height = height;
this.weight = weight;
}
可以用如下兩種方式建立一個“鳥”物件。
//無參構造器建立物件
Bird bird = new Bird();
//帶引數構造器建立物件
Bird bird = new Bird(10, 200);
這樣我們得到了一個實實在在的物件,可以控制其飛行或是進食。
bird.fly();
bird.eat();
1
2
注意:當我們沒有定義任何構造方法時,java會隱式地建立一個無參構造方法,一旦明確編寫帶引數的構造方法時。java就不會替我們生成預設的無參構造方法,如果需要無參構造方法,需要明確編寫。
以上場景的程式碼實現
首先最基礎的“鳥”類,Bird.java
**
* 鳥類
* @author 老王
*/
public class Bird {
/** 身高 */
int height;
/** 體重 */
int weight;
/**
* 無參構造方法,這裡指明你應該如何構造一個鳥類
*/
public Bird() {}
/**
* 帶參構造方法.
*/
public Bird(int height, int weight) {
this.height = height;
this.weight = weight;
}
/**
* 飛行方法
*/
public void fly(){
System.out.println("I can fly high!");
}
/**
* 進食方法
*/
public void eat(){
System.out.println("I can eat a lot!");
}
}
“鸚鵡”類:Parrot.java
/**
* 鸚鵡類,其繼承了鳥類。獲得了鳥類的全部的非私有方法和非私有屬性
* @author 老王
*/
public class Parrot extends Bird{
/**
* 這是鸚鵡類自定義的說話方法
*/
public void sayHello(){
System.out.println("I can speak Chinese!");
}
}
“喜鵲”類:Magpie.java
/**
* 喜鵲類,其繼承了鳥類。同樣獲得了鳥類的全部的非私有方法和非私有屬性
* @author 老王
*/
public class Magpie extends Bird{
/**
* 喜鵲類重寫了父類【Bird】的飛行方法,實現了其自己的個性化飛行方法
*/
@Override
public void fly(){
System.out.println("I can fly very high!");
}
}
測試類:上帝之手 God.java
/**
* 上帝之手類
* @author 老王
*/
public class God {
/**
* 主程式入口
*/
public static void main(String[] args) {
//建立鳥物件的方式,無參和有參構造
Bird bird1 = new Bird();
Bird bird2 = new Bird(10, 20);
//建立鸚鵡物件的方式,由於鸚鵡類繼承自鳥類,所以可以以Bird來建立鸚鵡物件
Bird parrot1 = new Parrot();
Parrot parrot2 = new Parrot();
System.out.println("----------鸚鵡發出的行為----------");
//鸚鵡學舌,來自於自定義的個性方法,而喜鵲沒有這個方法,所以喜鵲不能說話
parrot2.sayHello();
parrot2.fly();
System.out.println("----------鸚鵡發出的行為----------");
//建立喜鵲物件的方式,同樣由於喜鵲類繼承自鳥類,所以可以以Bird來建立喜鵲物件
Bird magpie1 = new Magpie();
Magpie magpie2 = new Magpie();
//由於喜鵲類覆蓋了鳥類的預設飛行方法,所以喜鵲飛行與眾不同!
System.out.println("----------喜鵲發出的行為----------");
magpie2.fly();
System.out.println("----------鸚鵡發出的行為----------");
}
}
執行結果:
----------鸚鵡發出的行為----------
I can speak Chinese!
I can fly high!
----------鸚鵡發出的行為----------
----------喜鵲發出的行為----------
I can fly very high!
----------鸚鵡發出的行為----------
總結
透過這節課我們學習了類和物件以及java其他獨有的語言特性,和最重要的特性——物件導向。物件導向為我們帶來了各個方面的好處,使程式易理解、易維護、易擴充套件、質量高。
目錄
老王的JAVA基礎課:序言
老王的JAVA基礎課:第1課 計算機基礎知識
老王的JAVA基礎課:第2課 JDK安裝和環境變數配置
老王的JAVA基礎課:第3課 IDEA的安裝和使用
老王的JAVA基礎課:第4課 以hello world學習基礎語法
其他文章
2020年高效搬磚必備的IDEA外掛(附安裝包)
詳解從p12證照提取RSA公私鑰和序列號(小白向)
————————————————
版權宣告:本文為CSDN博主「風舞葉揚」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u011580177/article/details/106559907
:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971700/viewspace-2696611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA(一)JAVA基礎/物件導向基礎/高階物件導向Java物件
- Java基礎-物件導向基礎Java物件
- Java課堂筆記(二):物件導向Java筆記物件
- Java第七課. 物件導向特徵2Java物件特徵
- JAVA物件導向基礎Java物件
- 【Java 基礎】——物件導向Java物件
- Java基礎 --- 物件導向Java物件
- JAVA物件導向基礎--物件導向介紹Java物件
- java基礎二:物件導向Java物件
- Python基礎(二十):物件導向“類”第三課——類成員Python物件
- 【Java基礎】物件導向開發Java物件
- (Java筆記)物件導向基礎Java筆記物件
- 【Java基礎】--再談物件導向Java物件
- JAVA物件導向基礎--異常Java物件
- 物件導向基礎物件
- java物件導向(5)Java物件
- Python基礎(二十一):物件導向“類”第四課——魔法方法Python物件
- Java 基礎(一)重新理解物件導向Java物件
- java基礎 - 物件導向三大特性Java物件
- Java基礎 --- 物件導向綜合訓練Java物件
- python 第十課 物件導向 2Python物件
- ES5物件導向基礎結構物件
- PHP物件導向基礎PHP物件
- Java基礎01 從HelloWorld到物件導向Java物件
- 課時37:類與物件:物件導向程式設計物件程式設計
- Java第八課. 物件導向特徵3-多型&抽象類Java物件特徵多型抽象
- PHP 物件導向基礎概念PHP物件
- python物件導向[基礎]Python物件
- 12 物件導向基礎-1物件
- Golang 基礎之物件導向Golang物件
- 【Java基礎知識】物件導向有哪些特性Java物件
- 『Java 語法基礎』物件導向有哪些特性Java物件
- JAVA物件導向基礎--N種內部類Java物件
- JAVA基礎:我個人的物件導向的程式觀(轉)Java物件
- 【筆記】阿里雲大學Java物件導向開發課程筆記01-77課時筆記阿里Java物件
- Java零基礎學習之路(八)Java物件導向Java物件
- [.net 物件導向程式設計基礎] (5) 基礎中的基礎——變數和常量物件程式設計變數
- 夯實Java基礎系列1:Java物件導向三大特性(基礎篇)Java物件