Java面向對象(四)

来源:https://www.cnblogs.com/xiaozhao01/archive/2022/07/11/16466472.html
-Advertisement-
Play Games

Java面向對象(四) 十一、package 關鍵字(拓展) 11.1 package 關鍵字的使用: 為了更好的實現項目中類的管理,提供包的概念 使用 package 聲明類或介面所屬的包,聲明在源文件的首行 包,屬於標識符,遵循標識符的命名規則、規範(xxxyyyzzz)、“見名知意” 一般包通 ...


Java面向對象(四)

目錄

十一、package 關鍵字(拓展)

11.1 package 關鍵字的使用:

  1. 為了更好的實現項目中類的管理,提供包的概念

  2. 使用 package 聲明類或介面所屬的包,聲明在源文件的首行

  3. 包,屬於標識符,遵循標識符的命名規則、規範(xxxyyyzzz)、“見名知意”

    一般包通常用小寫單詞標識。通常使用所在公司功能變數名稱的倒置:com.xxx.xxx

  4. 包對應於文件系統的目錄,package語句中,用 “.” 來指明包(目錄)的層次

  5. 補充:同一個包下,不能命名同名的介面、類。

    不同的包下,可以命名同名的介面、類。

  6. 它的格式為: package 頂層包名.子包名 ;

11.2 包的作用:

  • 包幫助管理大型軟體系統;
  • 將功能相近的類劃分到同一個包中。比如:MVC的設計模式 ;
  • 包可以包含類和子包,劃分項目層次,便於管理;
  • 解決類命名衝突的問題;
  • 控制訪問許可權。

11.3 Java主要的包

  1. java.lang ----包含一些 Java 語言的核心類,如String、Math、Integer、 System和 Thread,提供常用功能
  2. java.net ----包含執行與網路相關的操作的類和介面。
  3. java.io ----包含能提供多種輸入/輸出功能的類。
  4. java.util ----包含一些實用工具類,如定義系統特性、介面的集合框架類、使用與日期日曆相關的函數。
  5. java.text ----包含了一些java格式化相關的類
  6. java.sql ----包含了java進行JDBC資料庫編程的相關類/介面
  7. java.awt ----包含了構成抽象視窗工具集(abstract window toolkits)的多個類,這些類被用來構建和管理應用程式的圖形用戶界面(GUI)。 B/S C/S(已經不常用了)

11.4 MVC設計模式

MVC是常用的設計模式之一,將整個程式分為三個層次:視圖模型層,控制器層,與數據模型層。

這種將程式輸入輸出、數據處理,以及數據的展示分離開來的設計模式使程式結構變的靈活而且清晰,同時也描述了程式各個對象間的通信方式,降低了程式的耦合性。

十二、import 關鍵字

  1. 在源文件中顯式的使用 import 結構導入指定包下的類、介面

  2. 聲明在包的聲明和類的聲明之間

  3. 如果需要導入多個結構,則併列寫出即可。

  4. 可以使用"xxx."的方式,表示可以導入xxx包下的所有結構*。

  5. 如果使用的類或介面是 java.lang 包下定義的,則可以省略 import 結構

  6. 如果使用的類或介面是本包下定義的,則可以省略 import 結構

  7. 如果在源文件中,使用了不同包下的同名的類,則必須至少有一個類需要以全類名的方式顯示

//	例如:在 java.util 和 java.sql 包下都有 Date 的類
package ...

import java.util.*;
    
public class Test() {
    public static void main(String[] args){
        
        Date date = new Date();		// 使用的是 java.util 包下的類
		java.sql.Date date1 = new java.sql.Date(1234L);	// 以全類名的方式顯示
        
    }
}

  1. 使用"xxx.*"方式表明可以調用xxx包下的所有結構。但是如果使用的是xxx子包下的結構,則仍需要顯式導入

  2. import static:導入指定類或介面中的靜態結構:屬性或方法

package com.xxx;

import static java.lang.System.*;	//註意導入的是該類或介面中的靜態結構
import static java.lang.Math.*;

public class Test {
	public static void main(String[] args) {
	
		//	System.out.println("hello!");可以寫成
		
		out.println("hello");
		
        //  long num = Math.round(123.434);
        
        long num = round(123.434);
        
	}
}

十三、面向對象的特征之二:繼承性

13.1 繼承性的好處:

  1. 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中, 那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。減少了代碼的冗餘,提高了代碼的復用性;

  2. 便於功能的擴展;

  3. 為之後多態性的使用,提供了前提。

13.2 繼承性的格式:

  1. class A extends B{}

A:子類、派生類、subclass

B:父類、超類、基類、superclass

  1. 體現:一旦子類A繼承父類B以後,子類A中就獲取了父類B中聲明的所有的屬性和方法。

特別的,父類中聲明為private的屬性或方法,子類繼承父類以後,仍然認為獲取了父類中私有的結構。只有因為封裝性的影響,使得子類不能直接調用父類的結構而已。

  1. 子類繼承父類以後,還可以聲明自己特有的屬性或方法:實現功能的拓展。

    子類和父類的關係,不同於子集和集合的關係。

13.3 Java中關於繼承性的規定:

  1. Java只支持單繼承和多層繼承,不允許多重繼承。

    • 一個類可以被多個子類繼承。

    • Java中類的單繼承性:一個類只能有一個父類。

  1. 子父類是相對的概念。

  2. 子類直接繼承的父類,稱為:直接父類。間接繼承的父類稱為:間接父類

  3. 子類繼承父類以後,就獲取了直接父類以及所有間接父類中聲明的屬性和方法

13.4 註意:

  1. 如果沒有顯式的聲明一個類的父類的話,則此類繼承於 java.lang.Object 類
  2. 所有的 java 類(除 java.lang.Object 類之外)都直接或間接的繼承於 java.lang.Object 類
  3. 意味著,所有的 java 類具有 java.lang.Object 類聲明的功能。

十四、方法的重寫 (override/overwrite)

14.1 方法重寫的定義:

  • 子類繼承父類以後,可以對父類中同名同參數的方法,進行覆蓋操作

  • 重寫以後,當創建子類對象以後,通過子類對象調用子父類中的同名同參數的方法時,實際執行的是子類重寫父類的方法。

14.2 方法重寫的規定:

//	方法的聲明: 
    許可權修飾符  返回值類型  方法名(形參列表) throws 異常的類型{
					//方法體
	}

//	子類中的叫重寫的方法,父類中的叫被重寫的方法
  1. 子類重寫的方法的方法名和形參列表與父類被重寫的方法的方法名和形參列表相同。

  2. 子類重寫的方法的許可權修飾符不小於父類被重寫的方法的許可權修飾符

    特殊情況:子類不能重寫父類中聲明為private許可權的方法。

  3. 返回值類型:

    • 父類被重寫的方法的返回值類型是void,則子類重寫的方法的返回值類型只能是void。
    • 父類被重寫的方法的返回值類型是A類型,則子類重寫的方法的返回值類型可以是A類或A類的子類。
    • 父類被重寫的方法的返回值類型是基本數據類型(比如:double),則子類重寫的方法的返回值類型必須是相同的基本數據類型(必須也是double)。
  4. 子類重寫的方法拋出的異常類型不大於父類被重寫的方法拋出的異常類型。

  5. 子類和父類中的同名同參數的方法要麼都聲明為非static的(即為重寫)。

    要麼都聲明為static的,但不屬於方法的重寫。因為static方法是屬於類的,子類無法覆蓋父類的方法。

public class Person {
    public String name;
    public int age;
    public String getInfo() {
        return "Name: "+ name + "\n" +"age: "+ age;
    }
}
public class Student extends Person {
    public String school;
    public String getInfo() { 					//重寫方法
        return "Name: "+ name + "\nage: "+ age
                + "\nschool: "+ school;
    }
    public static void main(String args[]){
        Student s1=new Student();
        s1.name="Bob";
        s1.age=20;
        s1.school="school2";
        System.out.println(s1.getInfo()); //Name:Bob age:20 school:school2
    }
}

十五、super 關鍵字

15.1 super 的使用:

  • super可用於訪問父類中定義的屬性。
  • super可用於調用父類中定義的成員方法。
  • super可用於在子類構造器中調用父類的構造器。

註意:

  1. 尤其當子父類出現同名成員時,可以用super表明調用的是父類中的成員。
  2. super的追溯不僅限於直接父類
  3. super 和 this 的用法相像,this 代表本類對象的引用,super代表父類的記憶體空間的標識。

15.2 super 調用屬性和方法:

  1. 在子類的方法或構造器中,可以通過使用"super.屬性"或"super.方法"的方式,顯式的調用父類中聲明的屬性或方法。

    但是,通常情況下,我們習慣省略"super."

  2. 特殊情況:當子類和父類中定義了同名的屬性時,我們要想在子類中調用父類中聲明的屬性,則必須顯式的使用"super.屬性"的方式,表明調用的是父類中聲明的屬性。

  3. 特殊情況:當子類重寫了父類中的方法以後,我們想在子類的方法中調用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式,表明調用的是父類中被重寫的方法。

15.3 super 調用構造器:

  1. 可以在子類的構造器中顯式的使用"super(形參列表)"的方式,調用父類中聲明的指定的構造器。
  2. "super(形參列表)"的使用,必須聲明在子類構造器的首行!所以,在類的構造器中,針對於"this(形參列表)"或"super(形參列表)"只能二選一,不能同時出現。
  3. 在構造器的首行,沒有顯式的聲明"this(形參列表)"或"super(形參列表)",則預設調用的是父類中空參的構造器:super()
  4. 如果子類構造器中既未顯式調用父類或本類的構造器,且父類中又沒有無參的構造器,則編譯出錯。
  5. 在類的多個構造器中,至少有一個類的構造器中使用了"super(形參列表)",調用父類中的構造器。

15.4 this 和 super 的區別:

15.5 子類對象實例化的全過程

  1. 從結果上來看:(繼承性)
  •  **子類繼承父類以後,就獲取了父類中聲明的屬性或方法。**
    
  •  **創建子類的對象,在堆空間中,就會載入所有父類中聲明的屬性。**
    
  1. 從過程上來看:
  •  當我們通過子類的構造器創建子類對象時,我們一定會直接或間接的調用其父類的構造器,進而調用父類的父類的構造器, 直到調用了 java.lang.Object 類中空參的構造器為止。正因為載入過所有的父類的結構,所以才可以看到記憶體中有父類中的結構,子類對象才可以考慮進行調用。
    
  • 明確:雖然創建子類對象時,調用了父類的構造器,但是自始至終就創建過一個對象,即為new的子類對象。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般學習一項技術,會先用一個最簡單的例子或最典型的例子來向大家講解入門內容,所以此文為大家介紹使用docker安裝nginx容器服務。從基礎使用的角度來講,此文幾乎涵蓋了docker最核心的內容:鏡像拉取、容器運行、埠映射、文件映射,雖然基礎但很重要,所以建議認真學習。 一、拉取鏡像 docker ...
  • <b><font size=4>一、System靜態方法</font></b> 點擊查看代碼 package com.Tang.StringDay01; import org.junit.Test; public class DateTimeTest { /* System類中的currentTim ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 代碼提供者:青燈教育-巳月 知識點: 動態數據抓包 requests發送請求 結構化+非結構化數據解析 準備工作 下麵的儘量跟我保持一致哦~不然有可能會發生報錯 💕 開發環境: python 3.8運行代碼 pycharm 2021.2輔助敲代碼 re ...
  • 一、String類及常用方法 String :字元串,使用一對""引起來表示。 1.理解String的不可變性 (1)String實現了Serializable介面:表示字元串是支持序列化的 (2)實現了Comparable介面:可以比較大小 (3)String內部定義了final char[] v ...
  • 面向對象 在學習面向對象之前我們先來看一下麵向過程 面向過程思想 面向過程的步驟清晰簡單,第一步做什麼,第二步做什麼 面向對象過程適合處理一些簡單的問題 面向對象的過程可以用把大象放進冰箱舉例 ​ 面向對象的分析: ​ 第一步:把冰箱門打開 ​ 第二步:把大象放進冰箱 ​ 第三步:把冰箱門關上 面向 ...
  • 1、SpringCloud技術棧 開發分散式系統可能具有挑戰性,複雜性已從應用程式層轉移到網路層,並要求服務之間進行更多的交互。將代碼設為“cloud-native”就需要解決12-factor,例如外部配置,服務無狀態,日誌記錄以及連接到備份服務之類的問題,Spring Cloud項目套件包含使您 ...
  • 問題 當我使用kubeadm部署成功k8s集群時在想預設生成的證書有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 /etc/kubernetes/pki/front-proxy-ca.crt #10年有效期 /etc/kubernetes/p ...
  • 首先我們來瞭解一下什麼是CRM客戶管理系統? CRM系統包括一些核心的客戶關係管理業務功能,如:潛在客戶、客戶管理、拜訪管理、商機管理、訂單管理等模塊,滿足企業客戶關係信息化的要求,並幫助企業提高客戶資源的管理效率,能夠通過項目視圖清晰的瞭解每個項目的進展情況,通過豐富的統計報表掌握全局的項目數據。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...