【Java筆記】第8章:面向對象的三大特性(封裝、繼承、多態)

  • 前言
  • 1. 三大特性概述
  • 2. 封裝
  • 3. 繼承
  • 4. 多態
  • 結語

在這里插入圖片描述
在這里插入圖片描述

#include<GUIQU.h>
int main {
上期回顧:【Java筆記】第7章:面向對象
個人主頁:C_GUIQU
歸屬專欄:【Java學習】
return 一鍵三連;
}
在這里插入圖片描述

前言

各位小伙伴大家好!上期小編給大家講解了Java中的面向對象,接下來講講Java中面向對象的三大特性!

1. 三大特性概述

Java中面向對象的三大特性是封裝(Encapsulation)、繼承(Inheritance)和多態(Polymorphism)。這些特性是Java編程語言中實現面向對象編程(OOP)的核心概念。

  1. 封裝(Encapsulation)
    • 封裝是指將數據(屬性)和操作數據的方法(行為)封裝在一起,形成一個不可分割的整體。
    • 在Java中,封裝通過訪問修飾符(如publicprivateprotecteddefault)來實現,用于控制類成員(屬性和方法)的訪問級別。
    • 封裝的目的是保護對象的內部狀態不被外部直接訪問,只能通過公共接口(方法)來訪問和修改。
  2. 繼承(Inheritance)
    • 繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法。
    • 在Java中,繼承通過extends關鍵字來實現,子類可以擴展父類的功能,也可以覆蓋父類的方法以提供新的實現。
    • 繼承的目的是代碼復用和擴展,子類可以重用父類的代碼,同時添加新的屬性和方法。
  3. 多態(Polymorphism)
    • 多態是指允許不同類的對象對同一消息做出響應,即同一操作作用于不同的對象時可以有不同的解釋和行為。
    • 在Java中,多態通常通過接口(interface)和繼承來實現。
    • 多態的目的是提高代碼的靈活性和可擴展性,允許程序在不修改現有代碼的情況下,添加新的功能和行為。
      這三大特性使得Java成為了一個強大的面向對象編程語言,它們允許開發者以更接近現實世界的方式思考和解決問題。通過封裝,我們可以隱藏對象的內部實現細節,只暴露必要的接口;通過繼承,我們可以重用和擴展已有的代碼;通過多態,我們可以編寫更靈活、可擴展的代碼。

2. 封裝

封裝是面向對象編程中的一個核心概念,它將數據(屬性)和操作數據的方法(行為)組合在一起,形成一個不可分割的整體。封裝的目的是保護對象的內部狀態不被外部直接訪問,只能通過公共接口(方法)來訪問和修改。在Java中,封裝通過訪問修飾符(如publicprivateprotecteddefault)來實現。

【訪問修飾符】
在Java中,有四種訪問修飾符:

  1. public:公共的,可以被任何類訪問。
  2. private:私有的,只能被同一個類的其他方法訪問。
  3. protected:受保護的,可以被同一個包中的類訪問,或者被子類訪問。
  4. default(不寫):默認的,可以被同一個包中的類訪問。

【封裝的實現】
封裝的實現主要通過以下幾種方式:

  1. 屬性私有化:將類的屬性設置為私有,只允許類內部的方法訪問和修改。
    public class Person {private String name;private int age;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
    }
    
  2. 方法公開化:將類的屬性的設置和獲取方法設置為公開,以供外部使用。
  3. 構造方法:在類中定義構造方法,用于在創建對象時初始化對象的屬性。
    public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}
    }
    

【封裝的好處】
封裝有以下幾個好處:

  1. 保護對象的狀態:通過將屬性設置為私有,可以防止外部直接修改對象的內部狀態,從而保護對象的一致性和完整性。
  2. 提高代碼的可讀性和可維護性:通過公開的接口(方法)來訪問和修改對象的屬性,可以使代碼更易于理解和維護。
  3. 實現代碼的復用:通過繼承和多態,可以重用已有的代碼,并在此基礎上添加新的功能和行為。
  4. 提高系統的靈活性和可擴展性:通過封裝,可以更容易地添加新的功能和行為,而不需要修改現有的代碼。
    封裝是面向對象編程中非常重要的一個概念,它可以幫助開發者創建更可靠、可維護和可擴展的代碼。

3. 繼承

繼承是面向對象編程中的一個核心概念,它允許一個類(子類)繼承另一個類(父類)的屬性和方法。繼承的目的是代碼復用和擴展,子類可以重用父類的代碼,同時添加新的屬性和方法。在Java中,繼承通過extends關鍵字來實現。

【繼承的實現】
在Java中,繼承的實現主要通過以下幾個步驟:

  1. 聲明繼承關系:在子類中使用extends關鍵字來聲明它繼承自父類。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {void makeSound() {System.out.println("Dog barks");}
    }
    

    在這個例子中,Dog 類繼承了 Animal 類,并覆蓋了 makeSound 方法以提供特定的實現。

  2. 繼承屬性和方法:子類可以繼承父類的屬性和方法,包括私有屬性和方法。

  3. 重寫父類方法:子類可以覆蓋(override)父類的方法,以提供新的實現。覆蓋的方法必須具有相同的名稱、返回類型和參數列表。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog barks");}
    }
    

    在這個例子中,Dog 類覆蓋了 Animal 類的 makeSound 方法。

  4. 添加新屬性和方法:子類可以添加新的屬性和方法,以擴展父類的功能。

    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {void bark() {System.out.println("Dog barks");}
    }
    

    在這個例子中,Dog 類添加了一個新的方法 bark

【繼承的好處】
繼承有以下幾個好處:

  1. 代碼復用:子類可以重用父類的代碼,避免重復編寫相同的代碼。
  2. 擴展功能:子類可以擴展父類的功能,添加新的屬性和方法。
  3. 提高可讀性和可維護性:通過繼承,可以創建一個層次化的類結構,使得代碼更易于理解和維護。
  4. 實現多態:繼承是實現多態的基礎,通過繼承,可以創建具有相同接口的類,從而實現多態。繼承是面向對象編程中非常重要的一個概念,它可以幫助開發者創建更可靠、可維護和可擴展的代碼。

4. 多態

多態是面向對象編程中的一個核心概念,它允許不同類的對象對同一消息做出響應,即同一操作作用于不同的對象時可以有不同的解釋和行為。在Java中,多態通常通過接口(interface)和繼承來實現。多態的目的是提高代碼的靈活性和可擴展性,允許程序在不修改現有代碼的情況下,添加新的功能和行為。

【多態的實現】
多態的實現主要通過以下幾種方式:

  1. 接口(interface)
    • 接口是一組抽象方法的集合,用于定義一組行為。
    • 類可以通過實現接口來繼承接口的方法。
    • 接口中的方法都是抽象的,沒有具體的實現。
    • 實現接口的類必須提供接口中所有方法的實現。
    public interface Flyable {void fly();
    }
    public class Bird implements Flyable {public void fly() {System.out.println("Bird flies");}
    }
    public class Plane implements Flyable {public void fly() {System.out.println("Plane flies");}
    }
    public class PolyTest {public static void main(String[] args) {Flyable flyer1 = new Bird();Flyable flyer2 = new Plane();flyer1.fly(); // 輸出 "Bird flies"flyer2.fly(); // 輸出 "Plane flies"}
    }
    
  2. 繼承(Inheritance)
    • 子類可以覆蓋(override)父類的方法,以提供新的實現。
    • 覆蓋的方法必須具有相同的名稱、返回類型和參數列表。
    • 子類對象可以作為父類類型的引用,從而實現多態。
    public class Animal {void makeSound() {System.out.println("Animal makes a sound");}
    }
    public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog barks");}
    }
    public class PolyTest {public static void main(String[] args) {Animal animal = new Dog();animal.makeSound(); // 輸出 "Dog barks"}
    }
    

【多態的實現】
多態有以下幾個好處:

  1. 提高代碼的靈活性和可擴展性:通過多態,可以創建一個靈活的代碼結構,使得程序在不修改現有代碼的情況下,添加新的功能和行為。
  2. 實現代碼復用:通過繼承和接口,可以重用已有的代碼,并在此基礎上添加新的功能和行為。
  3. 提高代碼的可讀性和可維護性:通過多態,可以創建一個層次化的類結構,使得代碼更易于理解和維護。

多態是面向對象編程中非常重要的一個概念,它可以幫助開發者創建更可靠、可維護和可擴展的代碼。

結語

至此,Java面向對象的三大特性講解完畢。
感謝您的觀看!互三必回!持續更新中~!

在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14408.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后端技術常用網站

技術說明官網SpringBootMVC框架https://spring.io/projects/spring-bootSpringCloud微服務框架https://spring.io/projects/spring-cloud/MyBatis-PlusORM框架https://mp.baomidou.com/Swagger-UI文檔生產工具https://github.com/swagger-api/swagger-uiKibana分析和可視化平臺…

SO_REUSEPORT 之 TCP負載均衡驗證

首先啟動兩個tcp server&#xff0c; 代碼里開啟 SO_REUSEPORT [my_testlocalhost test]$ ./tcp_server_reuseport & [1] 1864 [my_testlocalhost test]$ Server listening on port 8888[my_testlocalhost test]$ ./tcp_server_reuseport & [2] 1865 [my_testlocalh…

網絡工程師備考1——基礎學習

認識設備 1 交換機 一、什么是交換機&#xff1f; 實現不同電腦之間數據的轉發 換機是一種用于電(光)信號轉發的網絡設備。 它可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。最常見的交換機是以太網交換機。交換機工作于OSI參考模型的第二層&#xff0c;即數據…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目錄 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息訂閱&#xff08;2.2&#xff09;JavaScript 消息訂閱 &#xff08;三&#xff09;Storage&#xff08;存儲&#xff09;&…

Linux:Ubuntu修改root密碼

Linux&#xff1a;Ubuntu修改root密碼 修改默認grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改內容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注釋這一行 GRUB_TIMEOUT5 # 將這一行的時間改為5秒進行開啟啟動的grub文件的復寫 rootshanxin:~…

芯課堂 | UI Creator 物理鍵盤移植指南

LVGL提供輸入設備的種類一共有5種&#xff0c;分別是&#xff1a;touchpad&#xff08;觸摸板&#xff09;、mouse&#xff08;鼠標&#xff09;、keypad&#xff08;鍵盤&#xff09;、encoder&#xff08;編碼器&#xff09;、button&#xff08;外部按鍵&#xff09;。而基于…

Tron 節點 性能壓測

文章目錄 一、代碼說明1.1 主要功能1.2 代碼示例1.3 代碼解釋1.4 執行流程 二、結果分析三、參數解釋3.1 numWorkers 和 numRequests 說明3.2 使用場景 四、注意事項 最近搭建了一個TRON節點&#xff0c;同事不相信我的自建節點比官方更靠譜&#xff0c;咱們給他使用golang寫一…

如何成為一個專業的AI產品經理?

可以找專業的老師帶。 可以找專業的內容學。 可以多遇挫折并快速學習&#xff0c;屢敗屢戰&#xff0c;筆者本人從業AI十年有余&#xff0c;吃了不少苦&#xff0c;有過很多或成功或失敗的經歷。 成為一個專業的AI產品經理需要一系列專業知識和技能的積累&#xff0c;以及在…

axios - 簡 單 的 請 求 模 板

import {message } from ant-design-vue import axios from axios import {useUserStore } from @/store/modules/user import router from @/routerconst instance = axios.create({baseURL: http://192.168.110.171:5201,timeout: 5000, })* 請求攔截器 insta

切換Ubuntu開機的主題

要將Ubuntu系統的啟動畫面&#xff08;即開機時的顯示界面&#xff09;從Lubuntu切換回原生的Ubuntu界面&#xff0c;可以按照以下步驟操作&#xff1a; 1. 安裝原生Ubuntu的plymouth主題 首先&#xff0c;確保你已經安裝了原生Ubuntu的plymouth主題。打開終端并運行以下命令…

基于Matlab卷積神經網絡(CNN)人臉識別系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 人臉識別技術作為計算機視覺領域的一個重要分支&#xff0c;已經廣泛應用于安全監控、身份驗證…

Python基礎知識歸納總結

目錄 一、線性表 總結 二、棧 三、隊列 四、哈希表 五、字符串 六、正則表達式 綜合示例 一、線性表 線性表&#xff08;通常用列表表示&#xff09;是一種按線性順序存儲元素的數據結構。 插入元素 (append, insert) 刪除元素 (remove, pop) 查找元素 (index) 更新…

FreeRTOS學習——FreeRTOS隊列(下)之隊列創建

本篇文章記錄我學習FreeRTOS隊列創建的知識。主要分享隊列創建需要使用的初始化函數、隊列復位函數。 需要進一步了解FreeRTOS隊列的相關知識&#xff0c;讀者可以參考以下文章&#xff1a; FreeRTOS學習——FreeRTOS隊列&#xff08;上&#xff09;_freertos 單元素隊列-CSDN博…

Spring、SpringMVC、SpringBoot 三者之間是什么關系

Spring、SpringMVC、SpringBoot 是三個獨立的框架&#xff0c;它們之間的關系是: 1. Spring是一個Java的輕量級應用框架&#xff0c;提供了基于IoC和AOP的支持&#xff0c;用于構建企業級應用。Spring有多 個模塊&#xff0c;包括 Spring Core、Spring Context、Spring JDBC、…

高質量油封選擇的重要性

在現代工業和機械系統中&#xff0c;油封的作用至關重要。它們不僅防止潤滑劑泄漏&#xff0c;還阻止污染物進入系統&#xff0c;從而保障設備的正常運行。選擇高質量的油封對于保證設備性能、延長使用壽命和降低維護成本至關重要。本文將從多個角度探討選擇高質量油封的重要性…

【hackmyvm】Slowman靶機

文章目錄 主機探測端口探測FTP匿名登錄 目錄探測hydra爆破mysql爆破zip------fcrackzip爆破密碼-----john提權 主機探測 ┌──(root?kali)-[/home/kali] └─# fping -ag 192.168.9.1/24 2>/dev/null 192.168.9.221 主機192.168.9.224 靶機端口探測 ┌──(roo…

送變電乙級資質申請攻略:關鍵步驟與注意事項

關鍵步驟&#xff1a; 工商注冊與資本核實&#xff1a; 確保企業已正式注冊&#xff0c;且注冊資金不少于100萬元人民幣&#xff0c;同時準備企業法人營業執照等相關證明文件。 人員配置與注冊&#xff1a; 根據資質要求&#xff0c;配置齊全合理的專業技術人員&#xff0c;包括…

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 及優化

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 官網 kkFileView - 在線文件預覽 (keking.cn) 安裝包 可以直接下載成品 也可以下載source 源碼 自己編譯 kkFileView 發行版 - Gitee.com 打開IDEA 然后先clear 再install 然后在 file-online-preview\server\target 目錄…

Nginx R31 doc-09-Serving Static Content 靜態內容

提供靜態內容 配置 NGINX 和 NGINX Plus 以提供靜態內容&#xff0c;使用類型特定的根目錄&#xff0c;檢查文件存在性&#xff0c;并進行性能優化。 本節介紹如何配置 NGINX 和 NGINX Plus 以提供靜態內容&#xff0c;如何定義搜索請求文件的路徑&#xff0c;如何設置索引文…

WordPress插件Disable WP REST API,可根據是否登錄來禁用REST API

前面跟大家分享了代碼版禁用WordPress REST API的方法&#xff08;詳見『WordPress4.7以上版本如何禁用JSON REST API&#xff1f;』&#xff09;&#xff0c;不過有些站長不太敢折騰自己的網站代碼&#xff0c;那么建議試試這款Disable WP REST API&#xff0c;它可以&#xf…