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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...