Java基礎:Java面向對象

面向過程的優點是性能比面向對象高,不需要面向對象的實例化;缺點是不容易維護、復用和擴展。面向對象的優點是具有封裝、繼承、多態的特性,因而容易維護、復用和擴展,可以設計出低耦合的系統;缺點是由于需要實例化對象,因此性能比面向過程低。

~

本篇主要記錄內容包括:面向對象的概念、封裝、繼承、多態


  • 上一篇內容:Java基礎:Java類與對象
  • 下一篇內容:Java基礎:Java抽象接口
  • 更多知識學習:全網最全的 Java 技術棧內容梳理(持續更新中)

文章目錄

    • 一、面向對象的概念
        • 1、面向對象和面向過程的區別
        • 2、對象和類
        • 3、面向對象的一般步驟
    • 二、特性:封裝
        • 1、概述
        • 2、訪問控制符
    • 三、特性:繼承
        • 1、概述
        • 2、繼承的特點
        • 3、方法的重寫(覆蓋)
    • 四、特性:多態
        • 1、概述
        • 2、注意事項
        • 3、編譯時多態(方法重載`overload`)與方法簽名
        • 4、運行時多態
        • 5、向上轉型與向下轉型


一、面向對象的概念

1、面向對象和面向過程的區別

  • 面向過程:將問題分解成步驟,然后按照步驟實現函數,執行時依次調用函數。數據和對數據的操作是分離的。
  • 面向對象:將問題分解成對象,描述事物在解決問題的步驟中的行為。對象與屬性和行為是關聯的。

面向過程的優點是性能比面向對象高,不需要面向對象的實例化;缺點是不容易維護、復用和擴展。

面向對象的優點是具有封裝、繼承、多態的特性,因而容易維護、復用和擴展,可以設計出低耦合的系統;缺點是由于需要實例化對象,因此性能比面向過程低。

Java面向對象的三大特性:封裝,繼承,多態

2、對象和類

  • 對象是現實世界中可以明確標識的實體,對象有自己獨有的狀態和行為。對象的狀態由數據域的集合構成,對象的行為由方法的集合構成。
  • 類是定義同一類型對象的結構,是對具有相同特征的對象的抽象。類是一個模板,用來定義對象的數據域和方法。可以從一個類創建多個對象,創建對象稱為實例化。

3、面向對象的一般步驟

  1. 先按照名詞提煉問題領域中的對象
  2. 對對象進行描述,其實就是在明確對象中應該具備的屬性和行為
  3. 通過new的方式,創建該事物的具體對象(對象實例化)
  4. 通過該對象調用它以后的功能

二、特性:封裝

1、概述

封裝(Encapsulation)是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法,也可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問,要訪問該類的代碼和數據,必須通過嚴格的接口控制。

外部調用者無需修改或者關心內部實現,內部細節對外部調用透明,外部調用無需修改或關心內部實現

封裝的優點: 隱藏細節、減少耦合、便于理解與維護、加強了代碼的安全性等

2、訪問控制符

Java 提供了三種訪問權限,準確的說還有一種是默認的訪問權限,加上它一共四種。

  • private: 在當前類中可訪問,使用對象:變量、方法。 注意:不能修飾類(外部類);
  • default:在當前包內和訪問,不使用任何修飾符。使用對象:類、接口、變量、方法;
  • protected: 在當前類和它派生的類中可訪問,使用對象:變量、方法。 注意:不能修飾類(外部類);
  • public: 公眾的訪問權限,誰都能訪問,使用對象:類、接口、變量、方法
修飾符訪問級別同類同包子類不同包
public公開OOOO
protect受保護OOOX
default默認OOXX
private私有OXXX

三、特性:繼承

1、概述

繼承: 從一個已知的類中派生出一個新的類,新類可以擁有已知類的行為和屬性,并且可以通過覆蓋/重寫來增強已知類的能力,子類共性的方法或者屬性直接采用父類的,而不需要自己定義,只需要擴展自己的個性化

通過 extends 關鍵字,可以聲明一個子類繼承另外一個父類,子類可以直接訪問父類的非私有化成員變量,訪問父類的私有化成員變量可以使用super.方法()

繼承的優點:提高代碼的復用性、提供了多態的前提、為多態做鋪墊等

繼承的初始化順序:父類的靜態代碼塊 -> 子類的靜態代碼塊 -> 父類的構造代碼塊 -> 父類的無參構造方法 -> 子類的構造代碼塊 -> 子類的無參構造方法

2、繼承的特點

  • 通過子類對象既可以調用自身的非private修飾的成員,也可以調用父類的非private 修飾的成員
  • 父類不可以訪問子類特有成員,即使是共有的
  • 子類的對象調用成員變量的時候,子類自己有,使用子類,子類自己沒有則調用父類,出現了同名的成員變量時,在子類中需要訪問父類中非私有成員變量時,需要使用 super 關鍵字
  • 子類的對象調用方法的時候,子類自己有,使用子類,子類自己沒有調用的父類,出現與父類一模一樣的方法時,會出現覆蓋操作,也稱為 override 重寫、復寫或者覆蓋

3、方法的重寫(覆蓋)

有繼承關系的子類 中, 子類覆蓋父類的方法

方法覆蓋的前提是,參數列表、方法名必須相同,返回值類型如果是基本數據類型則必須相同,如果是引用數據類型,則可以時返回值父類方法的返回值的子類類型

注意:

  • 方法的重寫(override)需方法名相同,參數類型相同
  • 子類返回類型小于等于父類方法返回類型;
  • 子類拋出異常小于等于父類方法拋出異常;
  • 子類訪問權限大于等于父類方法訪問權限;
  • 如果父類方法訪問修飾符為private則子類不能重寫該方法;
  • final 修飾的方法不允許在子類中覆蓋;
  • 父類被覆蓋的方法的參數列表中被聲明為 final 的參數,在子類的覆蓋方法的中可以不必指定為 final;
  • 靜態方法不能被覆蓋,只能被隱藏;

四、特性:多態

1、概述

多態: 是指對象的多種形態,封裝和繼承幾乎都是為多態而準備的。

Java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,又可以給這個子類(實現類對象)的父類(接口)變量賦值,最終多態體現為 父類引用變量可以指向子類對象

多態調用的三種格式:

  • 普通類多態定義的格式:父類 變量名 = new 子類();
  • 抽象類多態定義格式:抽象類 變量名 = new 抽象類子類();
  • 接口多態定義的格式:接口 變量名 = new 接口實現類();

多態的優點:提高代碼的可維護行、提高代碼的擴展性

2、注意事項

  • 多態分為編譯時多態和運行時多態,Java中的多態一般是運行時多態;
  • 必須有子父類關系或者類實現接口關系,否則無法完成多態;
  • 同一個父類的方法會被不同的子類重寫。在調用方法時,調用的為各個子類覆蓋后的方法;
  • 當變量名指向不同的子類對象時,由于每個子類覆蓋父類方法的內容不同,所以會調用不同的方法
  • 多態中成員訪問的特點:編譯看左邊,運行看左邊

3、編譯時多態(方法重載overload)與方法簽名

因為對于方法重載而言,雖然多個方法的方法名相同,但是我們的編譯器,可以根據方法調用代碼推斷出,所要調用的那個方法的方法簽名,從而根據方法簽名(jvm唯一的),確定要調用的方法

注:方法簽名: 方法名+方法參數列表

4、運行時多態

因為在編譯器編譯的時候,無法知道,具體調用的是哪個方法的代碼,只有當jvm具體真正執行到調用代碼的地方,jvm才能知道調用的究竟是哪個方法

實現運行時多態:繼承、方法覆蓋/重寫(override)、父類引用指向子類對象

5、向上轉型與向下轉型

# 向上轉型

  • 當有子類對象賦值給一個父類引用時,便是向上轉型,多態本身就是向上轉型的過程。(也叫:隱式轉型、自動轉型);
  • 格式:父類類型 變量名 = new 子類類型();;
  • 什么時候使用:當不需要面對子類類型時,通過提高擴展性,或者使用父類的功能就能完成相應的操作,這時就可以使用向上轉型

# 向下轉型

  • 一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用轉為子類引用,這個過程是向下轉型。如果是直接創建父類對象,是無法向下轉型的;
  • 格式:子類類型 變量名 = (子類類型) 父類類型的變量;
  • 什么時候使用:當要使用子類特有功能時,就需要使用向下轉型;
  • 向下轉型的好處:可以使用子類特有功能;
  • 但是弊端是需要面對具體的子類對象;
  • 在向下轉型時容易發生 ClassCastException 類型轉換異常。在轉換之前必須做類型判斷

# instanceof 關鍵字

  • 作用: 可以通過 instanceof 關鍵字來判斷是否能夠對象轉化。也就是,一個引用型的變量,是不是這個類型的對象,提高向下轉型的安全性;
  • 格式: boolean b = 對象 instanceof 數據類型; ,返回 true / false

注意:null instanceof <類名> 結果永遠是 false

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

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

相關文章

薪資生成

import openpyxl from openpyxl.styles import Font,Alignment,Side,Border#設置字體樣式 fontFont(name宋體,size20,boldTrue) font2Font(name宋體,size12,boldTrue) alignmentAlignment(horizontalcenter,verticalcenter,wrap_textTrue) sideSide(stylethin ,color000000) …

Java基礎:Java抽象接口

在Java中&#xff0c;一個沒有方法體的方法應該定義為抽象方法&#xff0c;而如果一個類中含有抽象方法&#xff0c;則該類必須定義為一個抽象類。接口是功能的集合&#xff0c;同樣可看做是一種特殊的數據類型&#xff0c;是比抽象類更為抽象的類&#xff0c;接口只描述所應該…

13 張圖帶你學懂 Kubernetes Service(轉載)

在 Kubernetes 中 Service 主要有4種不同的類型&#xff0c;其中的 ClusterIP 是最基礎的&#xff0c;如下圖所示&#xff1a; 當我們創建一個 NodePort 的 Service 時&#xff0c;它也會創建一個 ClusterIP&#xff0c;而如果你創建一個 LoadBalancer&#xff0c;它就會創建一…

Java基礎:Java異常機制

異常是程序運行過程中出現的錯誤。Java 把異常當作對象來處理&#xff0c;把異常信息封裝成了一個類&#xff0c;并定義一個基類java.lang.Throwable作為所有異常的超類。Throwable : 它是所有錯誤與異常的超類&#xff08;祖宗類&#xff09;,有兩個子類 Error 和 Exception。…

JavaWeb:Servlet的應用及接口介紹

廣義的 Servlet 泛指在服務器上運行的 Java 程序&#xff0c;但是這個 Java 程序&#xff0c;并不能獨立運行&#xff08;因為 Servlet 沒有 main 方法&#xff09;&#xff0c;需要部署在相應的 Servlet 容器中&#xff0c;比如 Tomcat 和 Jetty。Servlet 主要功能在于交互式地…

DOCKERFILE參數注解

Dockerfile由一行行命令語句組成&#xff0c;并且支持以#開頭的注釋行。 一般的&#xff0c;Dockerfile 分為四部分&#xff1a;基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。 Dockerfile的指令是忽略大小寫的&#xff0c;建議使用大寫&#xff0c;使用 # 作為…

Zookeeper:分布式過程協同技術

Zookeeper 是一個高性能的分布式一致系統&#xff0c;在分布式系統中有著廣泛的應用。基于它&#xff0c;可以實現諸如“分布式同步”、“配置管理”、“命名空間管理”等眾多功能&#xff0c;是分布式系統中常見的基礎系統。Zookeeper 主要用來解決分布式集群中應用系統的一致…

面試題2021-2-24

給某CentOs6慮擬機添加了新的數據盤&#xff0c;設備名為/de/sdd.寫命令格式化滿加的效的并掛載到指定目錄/opt fdisk -l mkfs.ext4 /de/sdd mount /de/sdd /opt 如何查看與RabbtMQ服務器之間的establish狀態連接數&#xff1f;netstat -an |grep ESTABLISHED |grep tcp |wc -l…

Zookeeper:在三種模式下的部署

zookeeper 安裝模式有三種&#xff1a;單機模式&#xff1a;單機單 server&#xff1b;集群模式&#xff1a;多機多 server&#xff0c;形成集群&#xff1b;偽集群模式&#xff1a;單機多 server&#xff0c;形成偽集群。 ~ 本篇內容包括&#xff1a;Zookeeper 官網下載、Zook…

Linux namespace概述

操作系統通過虛擬內存技術&#xff0c;使得每個用戶進程都認為自己擁有所有的物理內存&#xff0c;這是操作系統對內存的虛擬化。操作系統通過分時調度系統&#xff0c;每個進程都能被【公平地】調度執行&#xff0c;即每個進程都能獲取到CPU&#xff0c;使得每個進程都認為自己…

Zookeeper:Zookeeper的主從選舉機制

ZAB 協議&#xff0c;全稱 Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子廣播協議&#xff09;&#xff0c;是為分布式協調服務 ZooKeeper 專門設計的一種支持崩潰恢復的一致性協議。基于該協議&#xff0c;ZooKeeper 實現了一種主從模式的系統架構來保持集群中各個副…

Linux namespace之:uts namespace

理解uts namespace uts(UNIX Time-Sharing System) namespace可隔離hostname和NIS Domain name資源&#xff0c;使得一個宿主機可擁有多個主機名或Domain Name。換句話說&#xff0c;可讓不同namespace中的進程看到不同的主機名。 例如&#xff0c;使用unshare命令(較新版本L…

Zookeeper:事件監聽和通知機制

Zookeeper 允許客戶端向服務端的某個 Znode 注冊一個 Watcher 監聽&#xff0c;當服務端的一些指定事件觸發了這個 Watcher&#xff0c;服務端會向指定客戶端發送一個事件通知來實現分布式的通知功能&#xff0c;然后客戶端根據 Watcher 通知狀態和事件類型做出業務上的改變。 …

Linux namespace之:mount namespace

理解mount namespace 用戶通常使用mount命令來掛載普通文件系統&#xff0c;但實際上mount能掛載的東西非常多&#xff0c;甚至連現在功能完善的Linux系統&#xff0c;其內核的正常運行也都依賴于掛載功能&#xff0c;比如掛載根文件系統/。其實所有的掛載功能和掛載信息都由內…

Linux namespace之:network namespace

理解network namespace network namespace用來隔離網絡環境&#xff0c;「在network namespace中&#xff0c;網絡設備、端口、套接字、網絡協議棧、路由表、防火墻規則等都是獨立的」。 因network namespace中具有獨立的網絡協議棧&#xff0c;因此每個network namespace中都…

Kubernetes 的原理

kubernetes 已經成為容器編排領域的王者&#xff0c;它是基于容器的集群編排引擎&#xff0c;具備擴展集群、滾動升級回滾、彈性伸縮、自動治愈、服務發現等多種特性能力。 本文將帶著大家快速了解 kubernetes &#xff0c;了解我們談論 kubernetes 都是在談論什么。 kuberne…

Zookeeper:實現“分布式鎖”的 Demo

Zookeeper 能保證數據的強一致性&#xff0c;用戶任何時候都可以相信集群中每個節點的數據都是相同的。一個用戶創建一個節點作為鎖&#xff0c;另一個用戶檢測該節點&#xff0c;如果存在&#xff0c;代表別的用戶已經鎖住&#xff0c;如果不存在&#xff0c;則可以創建一個節…

JavaIO流:案例

java.io 包下需要掌握的流有 16 個&#xff0c;本篇內容包括&#xff1a;java.io包下需要掌握的流、Java IO 案例。 文章目錄一、java.io包下需要掌握的流二、Java IO 案例1、Demo 1&#xff08;FileInputStream&#xff09;2、Demo 2&#xff08;FileInputStream&#xff09;3…

比對excel數據

#!/usr/bin/env pythonimport openpyxl from openpyxl.styles import PatternFill from openpyxl.styles import colors from openpyxl.styles import Font, Color aD:/測算單位設置/比對/吉林/tmp001.xlsx bD:/測算單位設置/比對/吉林/國網吉林電力.xlsx cD:/測算單位設置/比對…

CPU 是如何執行任務的

前言 你清楚下面這幾個問題嗎&#xff1f; 有了內存&#xff0c;為什么還需要 CPU Cache&#xff1f; CPU 是怎么讀寫數據的&#xff1f; 如何讓 CPU 能讀取數據更快一些&#xff1f; CPU 偽共享是如何發生的&#xff1f;又該如何避免&#xff1f; CPU 是如何調度任務的&a…