JavaSE核心知識點02面向對象編程02-02(封裝、繼承、多態)

🤟致敬讀者

  • 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺

📘博主相關

  • 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息

文章目錄

    • JavaSE核心知識點02面向對象編程02-02(封裝、繼承、多態)
    • **一、封裝(Encapsulation)**
      • **1. 什么是封裝?**
      • **2. 如何實現封裝?**
      • **3. 代碼示例**
      • **4. 封裝的好處**
    • **二、繼承(Inheritance)**
      • **1. 什么是繼承?**
      • **2. 代碼示例**
      • **3. 繼承的注意事項**
    • **三、多態(Polymorphism)**
      • **1. 什么是多態?**
      • **2. 方法重寫(Override)**
      • **3. 向上轉型(Upcasting)**
      • **4. 多態的優勢**
    • **四、總結與對比**
    • **五、常見問題**
      • **1. 方法重載(Overload) vs 方法重寫(Override)**
      • **2. 什么時候用繼承?**


📃文章前言

  • 🔷文章均為學習工作中整理的筆記。
  • 🔶如有錯誤請指正,共同學習進步。

JavaSE核心知識點02面向對象編程02-02(封裝、繼承、多態)

好的!封裝、繼承和多態是面向對象編程(OOP)的三大核心特性,理解它們對掌握Java至關重要。我會用通俗易懂的方式為你講解,并結合代碼示例幫助你理解。


一、封裝(Encapsulation)

1. 什么是封裝?

  • 定義:將數據(屬性)和操作數據的方法(行為)捆綁在一個類中,并對外隱藏內部實現細節。
  • 核心思想:隱藏對象的屬性和實現細節,僅對外公開接口(方法)進行交互。
  • 目的:提高安全性、可維護性、靈活性(例如:避免屬性被隨意修改)。

2. 如何實現封裝?

  • 使用訪問修飾符控制屬性的可見性:
    • private:屬性只能在當前類內訪問。
    • public:屬性或方法可以被任何類訪問。
    • protected:允許子類和同包類訪問。
  • 提供公共的getter和setter方法操作屬性。

3. 代碼示例

public class Student {// 私有屬性,外部無法直接訪問private String name;private int age;// 公共的getter方法,允許外部獲取屬性值public String getName() {return name;}// 公共的setter方法,允許外部設置屬性值(可添加校驗邏輯)public void setName(String name) {if (name != null && !name.isEmpty()) {this.name = name;}}public int getAge() {return age;}public void setAge(int age) {if (age >= 0 && age <= 120) {  // 校驗年齡合法性this.age = age;}}
}// 使用示例
public class Main {public static void main(String[] args) {Student stu = new Student();stu.setName("Alice");stu.setAge(20);System.out.println(stu.getName() + ": " + stu.getAge());}
}

4. 封裝的好處

  • 安全性:防止屬性被非法修改(如年齡為負數)。
  • 靈活性:可以在setter方法中添加校驗邏輯,而外部調用者無需關心。
  • 代碼維護:修改類的內部實現時,不影響外部代碼。

二、繼承(Inheritance)

1. 什么是繼承?

  • 定義:子類(派生類)繼承父類(基類)的屬性和方法,并可以擴展自己的功能。
  • 核心思想:代碼復用 + 擴展功能。
  • 語法:使用 extends 關鍵字。

2. 代碼示例

// 父類:Animal
class Animal {private String name;public void eat() {System.out.println(name + " is eating.");}public void setName(String name) {this.name = name;}
}// 子類:Dog(繼承Animal)
class Dog extends Animal {// 擴展自己的方法public void bark() {System.out.println("Woof! Woof!");}
}// 使用示例
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.setName("Buddy");dog.eat();   // 調用父類方法dog.bark();  // 調用子類方法}
}

3. 繼承的注意事項

  • 單繼承:Java中一個類只能直接繼承一個父類(不支持多繼承)。
  • 構造方法:子類構造方法默認會調用父類的無參構造方法(可通過 super() 顯式調用父類構造方法)。
  • 方法重寫(Override):子類可以重寫父類的方法(后面多態中詳細講解)。

三、多態(Polymorphism)

1. 什么是多態?

  • 定義:同一操作作用于不同對象,可以有不同的行為(例如:同一方法在不同子類中有不同實現)。
  • 兩種形式
    1. 編譯時多態(靜態多態):方法重載(Overload)。
    2. 運行時多態(動態多態):方法重寫(Override) + 向上轉型(Upcasting)。

2. 方法重寫(Override)

  • 子類重新定義父類中已有的方法。
  • 規則
    • 方法名、參數列表必須與父類方法相同。
    • 返回類型可以是父類方法返回類型的子類。
    • 訪問權限不能比父類方法更嚴格。
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Override  // 注解:表示重寫父類方法public void makeSound() {System.out.println("Dog barks: Woof!");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows: Meow~");}
}

3. 向上轉型(Upcasting)

  • 將子類對象賦值給父類引用變量。
  • 目的:通過父類引用調用子類重寫的方法,實現多態。
public class Main {public static void main(String[] args) {Animal animal1 = new Dog();  // 向上轉型Animal animal2 = new Cat();animal1.makeSound();  // 輸出 Dog barks: Woof!animal2.makeSound();  // 輸出 Cat meows: Meow~}
}

4. 多態的優勢

  • 代碼擴展性:新增子類時無需修改原有代碼。
  • 統一接口:用父類引用處理不同子類對象。

四、總結與對比

特性核心思想關鍵實現方式
封裝隱藏細節,暴露接口private屬性 + getter/setter
繼承代碼復用,擴展功能extends關鍵字 + 方法重寫
多態同一方法不同表現方法重寫 + 向上轉型

五、常見問題

1. 方法重載(Overload) vs 方法重寫(Override)

  • 重載:同一類中,方法名相同,參數列表不同。
  • 重寫:子類中重新實現父類方法。

2. 什么時候用繼承?

  • 符合 “is-a” 關系時(例如:Dog is a Animal)。
  • 避免過度繼承(優先考慮組合而非繼承)。

通過這三個特性,你可以設計出靈活、可維護的Java程序。建議結合代碼實踐,嘗試自己編寫一些類,體會它們之間的關系!


📜文末寄語

  • 🟠關注我,獲取更多內容。
  • 🟡技術動態、實戰教程、問題解決方案等內容持續更新中。
  • 🟢《全棧知識庫》技術交流和分享社區,集結全棧各領域開發者,期待你的加入。
  • 🔵?加入開發者的《專屬社群》,分享交流,技術之路不再孤獨,一起變強。
  • 🟣點擊下方名片獲取更多內容🍭🍭🍭👇

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

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

相關文章

Yolo遷移訓練-帶訓練源碼

目錄 下載Git 拉下yolo模型 下載labelimg 準備訓練集 遷移訓練 繼續訓練 下載Git Git - Downloading Package 拉下yolo模型 然后用克隆腳本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 詳解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示詞模板模塊的深度解析,主要參考langchain_core.prompts源碼模塊與官方文檔。系統梳理 LangChain 對提示詞模板的封裝邏輯與設計思路,旨在幫助讀者構建全面、深入的知識體系,為高效運用LangChain 框架的提示詞模板開發應用…

中小企業設備預測性維護三步構建法:從零到精的技術躍遷與中訊燭龍實踐

在工業4.0浪潮中&#xff0c;中小企業常陷入"設備故障頻發"與"數字化成本高企"的雙重困境。本文基于半導體、食品加工等行業實證數據&#xff0c;結合中訊燭龍系統技術突破&#xff0c;為中小企業提供一套零基礎、低門檻、可擴展的預測性維護實施框架&…

C30-函數

一 函數的優點 避免代碼冗長模塊化的設計思路(十分類似組裝電腦)按功能劃分,每個函數代表一個功能 二 函數的三要素 函數要先定義再使用(就像是變量一樣)三要素: 函數名→體現功能參數列表 比如yf(x)→x就是參數又如yf(x,y)→x,y就是參數→參數的個數取決于需求 返回值:比如…

【Spring Boot 多模塊項目】@MapperScan失效、MapperScannerConfigurer 報錯終極解決方案

在使用 Spring Boot 構建多模塊項目&#xff0c;集成 MyBatis-Plus 時&#xff0c;很多開發者會遇到類似如下啟動報錯&#xff1a; Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl與unique_ptr的問題

PImpl與std::unique_ptr組合 pimpl(Pointer to Implementation)是C程序開發中非常常用的技巧之一&#xff0c;它的好處有&#xff1a; 節省程序編譯時間保持程序/庫的二進制兼容性隱藏實現細節 舉例一個常見的pimpl的使用示例&#xff1a; // a.h class Impl; //前置聲明 c…

C++類和對象:構造函數、析構函數、拷貝構造函數

引言 介紹&#xff1a;C類和對象&#xff1a;構造函數、析構函數、拷貝構造函數 _涂色_博主主頁 C基礎專欄 一、類的默認成員函數 先認識一下類中的默認成員函數&#xff1a; 默認成員函數就是用戶沒有顯式實現&#xff0c;編譯器會自動生成的成員函數稱為默認成員函數。?個類…

CTF - PWN之ORW記錄

CTF - Pwn之ORW記錄https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q

RabbitMQ 中的六大工作模式介紹與使用

文章目錄 簡單隊列&#xff08;Simple Queue&#xff09;模式配置類定義消費者定義發送消息測試消費 工作隊列&#xff08;Work Queues&#xff09;模式配置類定義消費者定義發送消息測試消費負載均衡調優 發布/訂閱&#xff08;Publish/Subscribe&#xff09;模式配置類定義消…

民宿管理系統6

普通管理員管理&#xff1a; 新增普通管理員&#xff1a; 前端效果&#xff1a; 前端代碼&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…

vue3+ant design vue + Sortable實現多級表格列拖動

1、最近遇到個需求&#xff0c;需使用vue3ant design vue Sortable實現多級表格的表頭允許用戶拖拽移動。即當用戶拖拽一級表頭時&#xff0c;其對應的子級表頭及數據應同步移動&#xff0c;并且只允許一級非固定表頭允許拖拽。 2、代碼 <a-table:data-source"rowDat…

第五十四篇 AI與數據分析

一、AI數據分析就像做菜 想象你在廚房做一道新菜&#xff0c;AI數據分析的流程其實非常相似&#xff1a; 買菜&#xff08;獲取數據&#xff09; 去市場挑選新鮮蔬菜 從Excel/數據庫獲取數據例&#xff1a;pd.read_csv(超市銷售表.csv) 洗菜切菜&#xff08;清洗數據&#x…

差分OPA verilogaA 模型

做電路設計&#xff0c;需要提前用理想模型如VerilogA模型做驗證。這里分享一個由ahdlib庫里單端opamp改造而來的差分opamp。參考何樂年的《模擬集成電路設計與仿真》10.4節423頁&#xff1b; 描述的小信號模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…

Solidity語言基礎:區塊鏈智能合約開發入門指南

一、Solidity概述 Solidity是以太坊生態系統中最重要的智能合約編程語言&#xff0c;由Gavin Wood于2014年提出。作為面向合約的高級語言&#xff0c;它結合了JavaScript、Python和C的語法特點&#xff0c;專為在以太坊虛擬機&#xff08;EVM&#xff09;上運行而設計。 核心…

開啟智能Kubernetes管理新時代:kubectl-ai讓操作更簡單!

在如今的科技世界中,Kubernetes 已經成為容器編排領域的標桿,幾乎所有現代應用的基礎設施都離不開它。然而,面對復雜的集群管理和日常運維,許多開發者常常感到無所適從。今天,我們將為大家介紹一款結合了人工智能的強大工具——kubectl-ai。它不僅能幫助開發者更加順暢地與…

2003-2020年高鐵站開通時間數據

2003-2020年高鐵站開通時間數據 1、時間&#xff1a;2003-2020年 2、來源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指標&#xff1a;高鐵站名稱、開通時間、所在省份、所在城市、所屬線路名稱 4、說明&#xff1a; Hsrwsnm[高鐵站名…

神經網絡—感知器、多層感知器

文章目錄 前言一、生物神經元與感知器的類比二、感知器1、簡單感知器2、多層感知器&#xff08;1&#xff09;多層感知機結構 3、神經網絡結構 總結1、感知器的局限性如何突破感知器的局限性&#xff1f; 2、感知器的應用 前言 感知器&#xff08;Perceptron&#xff09;是神經…

避免數據丟失:在存儲測試數據之前,要做好Redis持久化

Redis提供兩種持久化方法&#xff1a; 一、RDB&#xff08;Redis DataBase&#xff09;&#xff1a; 1、周期性保存內存快照到磁盤&#xff08;生成 dump.rdb 文件&#xff09;。 2、配置save 相關參數。 我本地的配置如下&#xff1a; &#xff08;1&#xff09;配置文件re…

Oracle EBS FORM快捷鍵與觸發器的關系與使用

Oracle EBS FORM快捷鍵與觸發器的引用 1、快捷鍵作用&#xff0c;可以看文檔fmrweb.res 2、文件內容&#xff1a;標識了快捷鍵的作用 9 : 0 : “Tab” : 1 : “Next Field” 9 : 1 : “ShiftTab” : 2 : “Previous Field” 116 : 0 : “F5” : 3 : “Clear Field” 38 : 0 :…

Java 24:重構數字信任邊界 —— 后量子時代的智能安全防御體系構建

引言 在量子計算陰影與 AI 驅動攻擊交織的網絡安全新紀元&#xff0c;Java 平臺正經歷著自誕生以來最深刻的安全架構革新。作為企業級應用的核心基礎設施&#xff0c;Java 24 不僅延續了 “一次編寫&#xff0c;處處運行” 的跨平臺基因&#xff0c;更以后量子密碼學引擎、動態…