永不服輸的Java之路---重學Java (第六章) 上篇

如若文章中出現衝突,或者出現錯誤,請聯繫 QQ:2669157689 指出我的問題。謝謝~

介紹面向對象編程的基本思想,通過本課的學習,我們應該掌握如下知識:

  1. 理解什麼是類、對象、構造器,
  2. 對象在內存中的表現形式及如何使用對象等。
  3. this和static關鍵字

JAVA編程基礎 —— 面向對象基礎

1. 面向對象編程思想

  1. 面向過程編程
    傳統的C語言屬於面向過程編程。面向過程解決問題的思路:通常是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,最後一個一個依次調用函數來解決。
    案例:ATM提款機終端系統(面向過程編程)
    步驟1:輸入密碼,系統判斷是否正確,如正確,進入取款界面,如錯誤,提示重新輸入。
    步驟2:進入取款界面,輸入取款金額,系統判斷餘額是否足夠,如不足,提示;如足夠,點鈔。
    步驟3:吐出鈔票,打印票據。
    面向過程編程考慮的問題是程序運行的流程,主要是程序的算
    法,而數據只是在必要的時候插入到算法中間。
  2. 面向對象編程(OOP:Object-Oriented Programming)
    從現實世界中客觀存在的事物出發來構造軟件系統,並在系統構造中儘可能運用人類的自然思維方式,強調直接以問題域中的事物爲中心來思考問題,認識問題,並根據這些事物的本質特點,把它們抽象地表示爲系統中的對象,作爲系統的基本構成單位。面向對象解決問題的思路:通常是把構成問題域的事務分解成各個對象,給對象賦予相應的屬性和行爲,通過多個對象的相互協調來解決問題。建立對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲 。支持面向對象編程是Java 語言的重要特點。
    案例:ATM提款機終端系統(面向對象編程)
    根據要解決的問題,可以抽象出如下對象:
    ① 客戶
    ② 銀行卡
    ③ 現金
    ④ 票據
    這些對象沒有先後順序,共同作用才構成了整個系統。我們只要用代碼設計出這幾個類型的對象,然後讓他們互相通信、傳遞消息就可以完成系統功能。
  3. 面向對象編程思想實際上就是一種運用對象、類、繼承、封裝、聚合、關聯、消息、多態性等概念來構造系統的軟件開發方法。
  4. 面向過程與面向對象的差別
    面向過程:
    ① 系統以過程/函數爲中心來組織
    ② 過程間相互發送數據
    ③ 過程的執行動作與數據被明顯的分離
    ④ 關注的焦點在於數據結構、算法和執行步驟
    ⑤ 過程通常難以被複用。
    面向對象:
    ① 系統以對象爲中心來組織
    ② 對象相互間發送消息
    ③ 相關的屬性和行爲被統一到對象上
    ④ 關注的焦點是對象及對象的職責
    ⑤ 使得系統構建更容易,易維護,易擴展,易複用
    ⑥ 解決問題的方式更接近人的思維方式,使人更容易理解
    從面向過程到面向對象,不僅僅是編程方式的改變,更重要的是思考方式的改變。
  5. 面向對象基本概念
    抽象(abstract):
    ① 從事物中捨棄個別的非本質特徵,抽取共同的本質特徵
    ② 只考慮與問題域相關的信息,而忽略與問題域不相關的部分
    對象(object):
    ① 可以是有形的,也可以是無形的(如一個客戶,一張銀行卡,窗體中的一個按鈕等等)
    ② 對象是構成世界的一個獨立單位
    ③ 具有自己的靜態結構(屬性)和動態行爲(方法)
    ④ 每個對象有自己的唯一標識
    類(class):
    類是一組具有相同屬性和行爲的對象的抽象,類的作用是用來創建對象,對象是類的一個實例
    類和對象的關係:
    ① 抽象和具體的關係
    ② 每一個類在某一時刻都有零個或更多的實例, 類是生成對象的模板
    ③ 一個類定義了使用哪些數據來描述屬性,每一個對象都有相應的屬性值數據,一個類通過一系列方法來定義行爲,這些方法能在每個對象中被激活
  6. 面向對象主要特徵
    封裝(encapsulation):
    ① 所謂封裝是把對象的屬性和行爲結合在一個獨立的系統單位內部
    ② 儘可能隱蔽對象的內部細節,只向外部提供接口
    ③ 降低對象間的耦合度
    ④ 封裝的重要意義:使對象能夠集中而完整地描述並對應一個具體事物;體現了事物的相對獨立性,使對象外部不能隨意存取對象的內部數據
    繼承(inheritance):
    ① 也稱泛化,繼承性是子類自動共享父類屬性和方法的機制,在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作爲自己的內容,並加入自己若干新的內容
    ② 繼承簡化了人們對事物的認識和描述,有益於軟件複用,是OO技術提高軟件開發效率的重要原因之一
    ③ 是類之間的一種關係,一般類與特殊類之間的關係
    ④ 繼承關係的語義:" is a kind of "
    多態(polymorphism):
    ① 指同一個命名可具有不同的語義
    ② OO方法中,常指在一般類中定義的屬性或方法被特殊類繼承之後,可以具有不同的數據類型或表現出不同的行爲,對於子類,可用不同的方法替代實現父類的服務的方法

2. 類的定義

  1. 什麼是類
    類的定義:
    ① 把相似的對象劃歸成一個類
    ② 在軟件設計中,類,就是一個模板,它定義了通用於一個特定種類的所有對象的屬性(變量)和行爲(方法)
    舉例(西遊記遊戲軟件中的遊戲人物,數據是虛構的):
    ① 孫悟空:孫悟空的武器是金箍棒,戰鬥力五顆星,耐力五顆星
    ② 唐僧:唐僧沒有武器,戰鬥力爲零,耐力五顆星
    ③ 豬八戒:豬八戒的武器是耙子,戰鬥力五顆星,耐力兩顆星
    ④ 沙僧:沙僧的武器是月牙鏟,戰鬥力三顆星,耐力四顆星
  2. 類的格式
    ① 修飾符一般爲 public ,也可以沒有修飾符
    ② 注意類名的命名規範,類名一般首字母大寫
    ③ 類的成員:成員變量(屬性),成員方法(方法),嵌套類
    ④ 通過 " . " 調用屬性和方法
    ⑤ 類的定義舉例(具體實例):
public class Student {
	private String name;
	private char sex;
	private double score;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public double getScore() {
		return score;
	}

	public void setScore(double score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", score=" + score + "]";
	}

	public void showInfo() {
		System.out.println("學生的名字是:" + name + ",性別是:" + sex + ",成績是:" + score);
	}

	public Student(String name, char sex, double score) {
		super();
		this.name = name;
		this.sex = sex;
		this.score = score;
	}

	public Student() {
		super();
	}
}
  1. 類成員的定義
    ① 成員變量:[修飾符] 類型 屬性名=[默認值];
    其中修飾符有:public、private、protected,也可以省略不寫
    ② 方法:
    [修飾符] 返回值類型 方法名(形參列表)
    {
    語句
    }
  2. 方法的定義
    ① 方法:方法是完成某個功能的一組語句,通常將常用的功能寫成一個方法
    示例:Function_sample1.java
    ② 方法的格式:
    [訪問控制符] [修飾符] 返回值類型 方法名(參數類型 形式參數,參數類型 形式參數,…)
    {
    方法體
    }
    ③ 方法的格式
    形式參數:在方法被調用時用於接收外部傳入的變量
    參數類型:就是該形式參數的數據類型
    返回值:方法在執行完畢後返回給調用它的程序的數據
    返回值類型:方法要返回的結果的數據類型
    ④ 方法的分類
    根據有參個數:有參方法、無參方法
    根據返回值類型
    1.有返回值的方法:基本數據類型、引用數據類型
    2.無返回值的方法:void
  3. 方法的調用
    ① 方法的調用
    方法只有在被調用後才生效,調用方法:
    1.無參方法的調用: 方法名( );
    2.有參方法的調用舉例:
public int add(int x, int y) {
	int z = x + y;
	return z;
}

public static void main(String[] args) {
	int x = fd.add(10, 20);
	System.out.println(x);
	int y = fd.add(100, 200);
	System.out.println(y);
}
  1. 方法的重載
    方法的重載就是在同一個類中允許同時存在一個以上同名的方法
    方法重載的規則:
    ① 方法名稱相同
    ② 方法的參數必須不同:參數個數不同或者參數類型不同
    ③ 方法的返回值類型可以相同,也可以不同
    ④ 舉例:
public int getSum(int end) {
	int sum = 0;
	for (int i = 1; i <= end; i++) {
		sum += i;
	}
	return sum;
}

public int getSum(int start, int end) {
	int sum = 0;
	for (int i = start; i < end; i++) {
		sum += i;
	}
	return sum;
}
  1. 方法應該注意的問題
    ① 形參必須註明數據類型
    ② 實參直接寫,不需要類型聲明
    ③ return只能返回一次
    ④ 遇到return語句,方法結束執行,後續語句不執行
    ⑤ 方法的返回值,必須與方法聲明中的返回值類型匹配
    ⑥ 方法定義,不能寫在main()中
    ⑦ 方法是不能嵌套的

太長了,分兩篇來發表吧。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章