面向對象編程-零基礎學習3

如果以上兩篇文章同學你已經跟練過了,接下來你就可以來了解我們面向對象的四個基本特徵了,概念其實很簡單,我會以最簡單的方式告訴你,重點是如何將這些重要的概念融會貫通到你的代碼中,用代碼體現出來你學習成果;首先彆着急,一點一滴的做事情,不積跬步無以至千里,不積小流無以成江河,學習也是一樣,積少成多的過程。

接下來我們來聊聊面向對象4大特種中幾個:

  1. 什麼是封裝?
    1. 封裝,就是隱藏實現細節。
  2. 封裝的舉例:
    1. 類對於屬性和方法的封裝。
    2. 對象對於數據的封裝。
    3. 方法對於代碼的封裝。
    4. 對於屬性的封裝。
  3. 如何對於屬性封裝?
    1. 將屬性私有化,提供公有方法訪問私有屬性。
  4. 老師類的屬性封裝:
    1. public class Teacher {
      	private String name; // 教員姓名
      	private int age; // 年齡
      	/**
      	 * 返回自我介紹的內容
      	 */
      	public String introduction() {
      		return "大家好!我是" + name + ",我今年" + age + "歲";
      	}	
      	public void setName(String name){
      		this.name = name;
      	}	
      	public String getName(){
      		return name;
      	}	
      	public void setAge(int age){
      		if(age>=22&&age<=150){
      			this.age = age;			
      		}else{
      			System.out.println("年齡不合法,恢復到初始狀態");
      			this.age = 22;
      		}
      	}	
      	public int getAge(){
      		return age;
      	}
      }
  5. 老師類的測試類

    1. public class TeacherTest {
      	public static void main(String[] args) {
      		Teacher t1 = new Teacher();//創建老師對象
      		//t1.name = "張老師";
      		//t1.age = -10;
      		t1.setName("張老師");
      		t1.setAge(1000);
      		
      		String s = t1.introduction();
      		System.out.println(s);
      		
      		System.out.println(t1.getName());
      		System.out.println(t1.getAge());
      	}
      }

       

  6. 爲什麼使用構造方法:
    1. 要簡化對象初始化的代碼,可以通過構造方法來解決。
    2. 檢查屬性的賦值,將代碼的安全性得到提高。
  7. 構造方法的作用,對象的初始化操作。
  8. 升級教師類,增加構造方法。
    1. public class Teacher {
      	private String name; // 教員姓名
      	private int age; // 年齡
      	private String edu;// 學歷
      	private String position;// 職位
      	//缺省的
      	public Teacher(){
      		
      	}
      	public Teacher(String name,int age,String edu,String position){
      		this.name = name;
      		this.age = age;
      		this.edu = edu;
      		this.position = position;
      	}
      	/**
      	 * 返回自我介紹的內容
      	 */
      	public String introduction() {
      		return "大家好!我是" + name + ",我今年" + age + "歲,學歷是" + edu + ",職位是" + position;
      	}
      	//屬性的:get 和 set 方法已經被省略
      }

       

  9. 測試老師,使用構造方法

    1. public class TeacherTest {
      	public static void main(String[] args) {
      		Teacher t1 = new Teacher("張老師", 33, "碩士", "講師");
      		String s = t1.introduction();
      		System.out.println(s);
      		
      		System.out.println(t1.getName());
      		System.out.println(t1.getAge());
      		
      	}
      }

       

  10. 構造方法必須滿足以下語法規則:
    1. 方法名與類名相同
    2. 沒有返回類型
  11. 方法重載:
    1. 方法名稱相同,形參列表不同。
    2. 典型案例:
      • println方法
      • Math.abs方法(求絕對值)
    3. 構造方法重載
  12. 方法重載是多態特性的重要體現
    1. 代碼運行時根據參數的不同會選擇不同的方法。
  13. 普通方法名稱可以與類名相同,但是不規範
    1. 普通方法名要準守駝峯命名法,例如:setName(String name);
  14. 構造方法普通方法的區別
    1. 構造方法沒有返回值類型。
    2. 構造方法名稱必須和類名相同。
    3. 構造方法是實例化對象時使用。(構造方法在創建該類的對象時候使用)
  15. 注意:
    1. 一個類中,默認缺省狀態有一個無參的構造方法。
    2. 一旦人爲定義一個有參的構造方法時候,缺省構造方法則消失。
  16. 面向對象的四大特性
    1. 封裝
    2. 繼承
    3. 多態
    4. 抽象
  17. 在Java程序中,代碼封裝帶給我們的好處是什麼?
    1. 代碼封裝的方法可以重複使用。
    2. 隱藏實現細節。
    3. 提高數據的安全性。
  18. 繼承關係設計
    1. 符合一個原則:什麼是什麼的一種。
    2. 父類更加通用,子類更加具體。
  19. 繼承:
    1. 概念:子類具有父類的一般特性(包括屬性和行爲),以及自身特殊的特性。
  20. 繼承的好處
    1. 子類自動繼承父類的屬性和方法,子類中不再存在重複代碼。
  21. 關鍵字super,表示的是:父類 或者是 基類。
  22. 關鍵字  this,表示的是:當前類的引用。
  23. 關鍵字extends,表示一個類繼承了另一個類。
  24. 繼承的特點
    1. 子類自動繼承父類的屬性和方法,子類中可以定義特定的屬性和方法。
  25. 創建老師類

    1. public class Teacher {
      	private String name;
      	private String school;
      	public Teacher() {
      	}
      	public Teacher(String name, String school) {
      		this.name = name;
      		this.school = school;
      	}
      	public void giveLession() {
      		System.out.println("知識點講解");
      		System.out.println("總結提問");
      	}
      	public void introduction() {
      		System.out.println("我是來自" + this.school + "的" + name);
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public String getSchool() {
      		return school;
      	}
      	public void setSchool(String school) {
      		this.school = school;
      	}
      }
  26. 創建JavaTeacher類

    1. public class JavaTeacher extends Teacher {
      	public JavaTeacher(String name,String school){
      		super(name, school);
      	}
      	/* 
      	 * 方法重寫,自類重寫父類的方法
      	 */
      	@Override
      	public void giveLession() {
      		System.out.println("打開Eclipse,講授JavaSE");
      		super.giveLession();
      	}
      	
      }

       

  27. 創建DoNet老師類

    1. public class DoNetTeacher extends Teacher {
      
      	public DoNetTeacher() {
      		super();
      	}
      	public DoNetTeacher(String name, String school) {
      		super(name, school);
      	}
      	@Override
      	public void giveLession() {
      		System.out.println("打開VS2019");
      		super.giveLession();
      	}
      }

       

  28. 創建測試類

    1. public class TeacherTest {
      
      	public static void main(String[] args) {
      		JavaTeacher t1 = new JavaTeacher("Lisa", "HK");
      		t1.introduction();
      		t1.giveLession();
      		DoNetTeacher t2 = new DoNetTeacher("Tom", "BJ");
      		t2.introduction();
      		t2.giveLession();
      	}
      }

       

  29. Object:一切類的根父類
    1. 一切類直接過着間接都繼承了Object類
  30. 方法重寫
    1. 子類繼承父類,重寫父類的方法要求:
      • 方法名稱相同,返回值類型相同,形參列表相同。
      • 訪問修飾符不能小於父類的訪問修飾符範圍。、
    2. 方法重寫的典型案例:
      • Object的toString()方法;
        1. 返回該對象的字符串表示形式。
        2. 默認返回該對象的內存地址。
  31. 多態
    1. 概念:多態是具有表現多種形態的能力的特徵,
    2. 同一個實現接口,使用不同的實例而執行不同操作。
    3. 多態性是OOP的一個重要特性,主要是用來實現動態聯編的,換句話說,就是程序的最終狀態只有在執行過程中才被決定,而非在編輯期間就決定了。這對於大型系統來說能提高系統的靈活和擴展性。
  32. 多態形成的條件:
    1. 要有繼承關係;
    2. 要有方法重寫;
    3. 父類引用指向子類對象。
  33. 多態的體現形式:
    1. 方法重載是多態特性的重要體現
      • 代碼運行時根據參數的不同會選擇不同的方法。
    2. 方法的形參處定義的是父類的類型,實際傳入的是具體子類的對象。
  34. 多態的優點
    1. 提高了代碼的靈活性和可擴展性。
    2. 優點的案例:
      • 使用多態之後,當需要增加新的子類類型時,無需更改總部類,程序的可擴展性及可維護性增強。
  35. 構造器的相關知識點:
    1. 繼承關係,子類創建對象時候。
    2. 會默認的先執行父類的構造器。
    3. 如果沒有明確指出,就會執行父類無參的缺省構造器。
  36. 普通方法調用
    1. 子類重寫了父類的方法,就會替換父類的方法。
    2. 如果需要調用父類的方法,需要使用關鍵字:super。

未完待續,下一篇文章見。

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