封裝、繼承、多態

封裝是什么?

封裝是面向對象的特征之一,是對象和類概念的主要特性。

封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。

封裝,是把客觀對象變成抽象的類的過程,在這個過程中,抽象出具體對象的特征,包裝成一個**“黑盒子”**,達到信息隱藏的目的。封裝后的類會把重要信息隱藏,把自己的數據和方法只讓可信的類或者對象操作。

封裝的意義是什么?

封裝把一個對象的屬性私有化,同時提供一些可以被外界訪問的屬性的方法,如果不想被外界方法,我們大可不必提供方法給外界訪問。但是如果一個類沒有提供給外界訪問的方法,那么這個類也沒有什么意義了。

封裝的意義在于將對象的抽象化,抽象的類內部可以自由進行修改,同時減少耦合,使類相對獨立,并能隱藏信息,保護信息安全。

這段代碼中,將 nameage 屬性設置為私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏:

public class Person {private String name;private int age;
}

繼承是什么?

繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承我們能夠非常方便地復用以前的代碼,能夠大大的提高開發的效率。

子類的特征

1、子類擁有父類非private的屬性和方法。

2、子類可以擁有自己屬性和方法,即子類可以對父類進行擴展。

3、子類可以用自己的方式實現父類的方法。

對類進行繼承,被繼承的類叫做父類,繼承的新類叫做子類,子類完全繼承父類的屬性和方法,并且子類是父類的特殊化,它不僅繼承了父類的特征,還會具有自己獨有的特征。父類可以完全代替子類,但子類不能代替父類,就像兒子可以繼承父親的財產,但父親不能繼承兒子的財產一樣,這個特征被叫作“向上轉型”。

繼承的代碼舉例:

父類

public class Animal { private String name;  private int id; public Animal(String myName, int myid) { name = myName; id = myid;} public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是"         + id + "號" + name + "."); } 
}

子類1:

public class Penguin extends Animal { public Penguin(String myName, int myid) { super(myName, myid); } 
}

子類2:

public class Mouse extends Animal { public Mouse(String myName, int myid) { super(myName, myid); } 
}

子類繼承了父類非private的屬性和方法,讓代碼更簡潔,并提高了代碼的復用性,而Java中不能多繼承,但是能多重繼承,如上述代碼,子類1繼承父類,子類2繼承子類1,不能同時繼承一個父類。

多態是什么?

多態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。

Java是一個典型的面向對象的編程語言,它屬于解釋型的語言,由于它只在運行時才逐句進行翻譯,所以它引用的變量的類型和該變量調出的類的方法在編程時并不能確定,只能在運行時才能確定,類似于**“薛定諤的貓”,不同的是,這個形態時可以人為引導它“塌陷”**到某一具體的類,這樣一來,程序員可以在不修改源代碼的情況下,就可以讓引用的變量綁定不同的類,從而調用不同的方法,讓程序可以選擇多個狀態,這就是面向對象語言的多態性。

多態如何實現?

Java實現多態有三個必要條件**:繼承、重寫、向上轉型。**

**繼承:**在多態中必須存在有繼承關系的子類和父類。

**重寫:**子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。

**向上轉型:**在多態中需要將子類的方法賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。

在多態中必須存在繼承關系,子類和分類必須存在,同時子類對父類會進行重寫,形成屬于自己的獨有特征。并將自己方法傳遞給分類,做向上轉型,在向上轉型的過程中,子類會丟失自己獨有的方法,向上轉型的目的是為了讓方法復用。

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

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

相關文章

C++儲備

一、類的 三大特性 封裝,繼承,多態 二、虛函數 為啥要用到虛函數 C虛函數詳解_Whitesad_的博客-CSDN博客 三、函數重載 四、封裝的保護權限 1.public 成員類內,內外都可以訪問 2.protected 成員,類內可以訪問&#xff0c…

大牛分析相機鏡頭光學中疑難問題

1、變焦和對焦有什么區別? 變焦就是改變鏡頭的焦距(準確說是像距),以改變拍攝的視角,也就是通常所說的把被攝體拉近或推遠。例如18-55mm和70-200mm鏡頭就是典型的變焦鏡頭。焦距越長,視角越窄。 對焦通常指調整鏡片組和底片(傳感器平面)之間的距離,從而使被攝物在CC…

SElinux 導致 Keepalived 檢測腳本無法執行

哈嘍大家好,我是咸魚 今天我們來看一個關于 Keepalived 檢測腳本無法執行的問題 一位粉絲后臺私信我,說他部署的 keepalived 集群 vrrp_script 模塊中的腳本執行失敗了,但是手動執行這個腳本卻沒有任何問題 這個問題也是咸魚第一次遇到&…

《安富萊嵌入式周報》第320期:鍵盤敲擊聲解碼, 軍工級boot設計,開源CNC運動控制器,C語言設計筆記,開源GPS車輛跟蹤器,一鍵生成RTOS任務鏈表

周報匯總地址:嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 視頻版: https://www.bilibili.com/video/BV1Cr4y1d7Mp/ 《安富萊嵌入式周報》第320期:鍵盤敲擊…

【智慧工地源碼】:人工智能、BIM技術、機器學習在智慧工地的應用

智慧工地云平臺是專為建筑施工領域所打造的一體化信息管理平臺。通過大數據、云計算、人工智能、BIM、物聯網和移動互聯網等高科技技術手段,將施工區域各系統數據匯總,建立可視化數字工地。同時,圍繞人、機、料、法、環等各方面關鍵因素&…

理解持續測試,才算理解DevOps

軟件產品的成功與否,在很大程度上取決于對市場需求的及時把控,采用DevOps可以加快產品交付速度,改善用戶體驗,從而有助于保持領先于競爭對手的優勢。 作為敏捷開發方法論的一種擴展,DevOps強調開發、測試和運維不同團…

centos如何安裝libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg

在 CentOS 系統上安裝這些包可以按照以下步驟進行: 打開終端,使用 root 或具有管理員權限的用戶登錄。 使用以下命令安裝 libssl-dev 包: yum install openssl-devel使用以下命令安裝 libsdl-dev 包: yum install SDL-devel使用以…

Go 安裝配置

介紹Ubuntu20.04 安裝和配置Go 1.安裝Go 去這個地方下載Go https://go.dev/doc/install 如果之前安裝過,可以參考這個(沒有可以忽略) 下載完成后執行 sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz 然后修改環境變量 sudo ge…

css3-grid:grid 布局 / 基礎使用

一、理解 grid 二、理解 css grid 布局 CSS Grid布局是一個二維的布局系統,它允許我們通過定義網格和網格中每個元素的位置和尺寸來進行頁面布局。CSS Grid是一個非常強大的布局系統,它不僅可以用于構建網格布局,還可以用于定位元素&#xf…

ahooks.js:一款強大的React Hooks庫及其API使用教程(一)

一、ahooks.js簡介二、ahooks.js安裝三、ahooks.js API介紹與使用教程1. useRequest2. useAntdTable3. useSize4. useBoolean5. useToggle6. useHover7. useDebounce8. useEventListener9. useFusionTable10. useKeyPress11. useLoading12. usePrevious13. useForm14. useUpdat…

代碼審計-ASP.NET項目-未授權訪問漏洞

代碼審計必備知識點: 1、代碼審計開始前準備: 環境搭建使用,工具插件安裝使用,掌握各種漏洞原理及利用,代碼開發類知識點。 2、代碼審計前信息收集: 審計目標的程序名,版本,當前環境(系統,中間件…

Flink源碼之State創建流程

StreamOperatorStateHandler 在StreamTask啟動初始化時通過StreamTaskStateInitializerImpl::streamOperatorStateContext會為每個StreamOperator 創建keyedStatedBackend和operatorStateBackend,在AbstractStreamOperator中有個StreamOperatorStateHandler成員變量…

Web framework-Gin

一、Gin Go Web--Go Module 軟件框架(software framework),通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品。 框架就是&#…

機器學習|Softmax 回歸的數學理解及代碼解析

機器學習|Softmax 回歸的數學理解及代碼解析 Softmax 回歸是一種常用的多類別分類算法,適用于將輸入向量映射到多個類別的概率分布。在本文中,我們將深入探討 Softmax 回歸的數學原理,并提供 Python 示例代碼幫助讀者更好地理解和…

HarmonyOS NEXT新能力,一站式高效開發HarmonyOS應用

2023年8月6日華為開發者大會2023(HDC.Together)圓滿收官,伴隨著HarmonyOS 4的發布,華為向開發者發布了匯聚所有最新開發能力的HarmonyOS NEXT開發者預覽版,并分享了圍繞“一次開發,多端部署” “可分可合&a…

代碼隨想錄算法訓練營第60天|動態規劃part17| 647. 回文子串、516.最長回文子序列、動態規劃總結篇

代碼隨想錄算法訓練營第60天|動態規劃part17| 647. 回文子串、516.最長回文子序列、動態規劃總結篇 647. 回文子串 647. 回文子串 思路: 暴力解法 兩層for循環,遍歷區間起始位置和終止位置,然后還需要一層遍歷判斷…

【mysql】—— 表的增刪改查

目錄 序言 (一)Create操作 1、單行數據 全列插入 2、多行數據 指定列插入 3、插入否則更新 4、直接替換 (二)Retrieve操作 1、SELECT 列 1??全列查詢 2??指定列查詢 3??查詢字段為表達式 4??為查詢結果指定…

數據結構——堆

數據結構——堆 堆堆簡介堆的分類 二叉堆過程插入操作 刪除操作向下調整: 增加某個點的權值實現參考代碼:建堆方法一:使用 decreasekey(即,向上調整)方法二:使用向下調整 應用對頂堆 其他&#…

Python Flask+Echarts+sklearn+MySQL(評論情感分析、用戶推薦、BI報表)項目分享

Python FlaskEchartssklearnMySQL(評論情感分析、用戶推薦、BI報表)項目分享 項目背景: 隨著互聯網的快速發展和智能手機的普及,人們越來越傾向于在網上查找餐廳、購物中心、酒店和旅游景點等商戶的點評和評分信息,以便做出更好的消費決策。…

YOLOv8 : 網絡結構

一. YOLOv8網絡結構 1. Backbone YOLOv8的Backbone同樣參考了CSPDarkNet-53網絡,我們可以稱之為CSPDarkNet結構吧,與YOLOv5不同的是,YOLOv8使用C2f(CSPLayer_2Conv)代替了C3模塊(如果你比較熟悉YOLOv5的網絡結構,那YOLOv8的網絡…