日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java面向对象回顾

發(fā)布時(shí)間:2024/1/18 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面向对象回顾 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java面向?qū)ο蠡仡?/h1>

文章目錄

  • Java面向?qū)ο蠡仡?/li>
  • 一、面向?qū)ο?/li>
    • 1、什么是對(duì)象
      • 現(xiàn)實(shí)生活中的對(duì)象與程序中的對(duì)象
    • 2、什么是面向?qū)ο?/li>
      • 面向過程
      • 面向?qū)ο?/li>
    • 3、面向過程與面向?qū)ο蟮谋容^
      • 思想方面
      • 設(shè)計(jì)方式方面
      • 實(shí)現(xiàn)方式方面
    • 4、面向過程與面向?qū)ο蟮膬?yōu)缺點(diǎn)
      • 面向過程的優(yōu)點(diǎn)
      • 面向過程的缺點(diǎn)
      • 面向?qū)ο蟮膬?yōu)點(diǎn)
      • 面向?qū)ο蟮娜秉c(diǎn)
    • 5、面向過程與面向?qū)ο蟮氖褂脠?chǎng)景
      • 面向過程的使用場(chǎng)景
      • 面向?qū)ο蟮氖褂脠?chǎng)景
    • 6、Java 中常用的面向過程的操作
    • 7、Java 面向過程與面向?qū)ο缶幊淌纠?/li>
      • 面向過程:求兩個(gè)證書的最大公約數(shù)
      • 面向?qū)ο?#xff1a;求兩個(gè)證書的最大公約數(shù)
  • 二、面向?qū)ο?#xff1a;封裝性
    • 1、概述
    • 2、Java 封裝性的優(yōu)缺點(diǎn)
      • 封裝性的優(yōu)點(diǎn)
      • 封裝性的缺點(diǎn)
    • 3、Java 封裝性的使用場(chǎng)景
    • 4、Java 不適用封裝性的場(chǎng)景
    • 5、Java 中封裝性的最佳實(shí)踐是什么
  • 三、面向?qū)ο?#xff1a;繼承性
    • 1、概述
    • 2、Java 繼承性的優(yōu)缺點(diǎn)
      • 繼承的優(yōu)點(diǎn)
      • 繼承的缺點(diǎn)
    • 3、Java 繼承性的適用場(chǎng)景
    • 4、Java 繼承性的不適用場(chǎng)景
    • 5、學(xué)習(xí) Java 的繼承性應(yīng)注意哪些問題
    • 6、Java 中繼承性的最佳實(shí)踐是什么
  • 四、面向?qū)ο?#xff1a;多態(tài)性
    • 1、概述
    • 2、Java 多態(tài)性的優(yōu)缺點(diǎn)
      • 多態(tài)性優(yōu)點(diǎn)
      • 多態(tài)性缺點(diǎn)
    • 3、Java 多態(tài)性的適用場(chǎng)景
    • 4、Java 多態(tài)性的不適用場(chǎng)景
    • 5、學(xué)習(xí) Java 的多態(tài)性應(yīng)注意哪些問題
    • 6、Java 中多態(tài)性的最佳實(shí)踐是什么

一、面向?qū)ο?/h1>

頭腦風(fēng)暴:

  • 什么是對(duì)象?
  • 什么是面向?qū)ο?#xff1f;
  • 為什么要面向?qū)ο?#xff1f;
  • 面向?qū)ο蟮膬?yōu)缺點(diǎn)?
  • 1、什么是對(duì)象

    現(xiàn)實(shí)生活中的對(duì)象與程序中的對(duì)象

    一切皆對(duì)象,現(xiàn)實(shí)生活中:電腦、耳機(jī)、水杯、書等等,相比現(xiàn)實(shí)生活,程序中的對(duì)象是抽象出來的,要么是基于現(xiàn)實(shí)中的對(duì)象抽象出來,只包含了現(xiàn)實(shí)中對(duì)象的部分信息,要么是根本應(yīng)用程序的需要而抽象出來的,如:職工對(duì)象(通常只記錄部分與職工相關(guān)性較高的信息),學(xué)生對(duì)象(通常也只記錄與學(xué)生相關(guān)性較高的信息)。職工和學(xué)生是一個(gè)“角色對(duì)象”,因?yàn)樗麄円部赡芡瑫r(shí)是兒子、女兒、父親、母親、觀眾、演員……,但在特定的場(chǎng)景下僅使用他們對(duì)應(yīng)的屬性信息等。程序中也有現(xiàn)實(shí)中不存在的對(duì)象,比如一個(gè)數(shù)據(jù)庫、一張數(shù)據(jù)表、一個(gè)服務(wù)器的連接,這是根據(jù)應(yīng)用程序的需要抽象得到的,為了完成業(yè)務(wù)需求!

    2、什么是面向?qū)ο?/h2>

    面向?qū)ο髮?duì)應(yīng)的是面向過程

    面向過程

    分析解決某個(gè)問題所需要的步驟,然后根據(jù)步驟一步一步通過代碼實(shí)現(xiàn)。

    把大象裝進(jìn)冰箱:

  • 打開冰箱門;
  • 大象進(jìn)入冰箱;
  • 關(guān)閉冰箱門。
  • 面向過程,就是按照我們分析好的步驟,按照步驟解決問題。

    面向?qū)ο?/h3>

    把事務(wù)分解成一個(gè)一個(gè)對(duì)象,然后對(duì)象之間分工與合作

    把大象裝進(jìn)冰箱:

  • 冰箱門打開(冰箱對(duì)象的行為);
  • 大象進(jìn)入冰箱(大象對(duì)象的行為);
  • 冰箱門關(guān)住(冰箱對(duì)象的行為)。
  • 面向?qū)ο?#xff0c;是以對(duì)象功能來劃分問題,而不是步驟。

    3、面向過程與面向?qū)ο蟮谋容^

    一句話:面向過程數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的,按照順序執(zhí)行函數(shù),完成任務(wù);面向?qū)ο蟮臄?shù)據(jù)和操作數(shù)據(jù)的函數(shù)被封裝在對(duì)象內(nèi)部,是統(tǒng)一的,對(duì)象之間通過消息傳遞進(jìn)行協(xié)作,以完成任務(wù)!

    面向過程(Procedural Programming)和面向?qū)ο?#xff08;Object-Oriented Programming)是兩種編程范式,它們有著不同的思想、設(shè)計(jì)方式和實(shí)現(xiàn)方法

    思想方面

    面向過程思想將程序看作一系列函數(shù)或過程的集合,這些函數(shù)或過程按照順序執(zhí)行,完成特定的任務(wù)。在面向過程的程序設(shè)計(jì)中,數(shù)據(jù)與行為是分開的,數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的。

    面向?qū)ο笏枷?/strong>則認(rèn)為程序應(yīng)該是由一組相互作用的對(duì)象組成的,每個(gè)對(duì)象都有自己的狀態(tài)和行為。面向?qū)ο笤O(shè)計(jì)中,對(duì)象是程序的基本單位,數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)被封裝在對(duì)象內(nèi)部,數(shù)據(jù)與行為是緊密聯(lián)系的

    設(shè)計(jì)方式方面

    面向過程編程中,問題被分解為若干個(gè)子問題,每個(gè)子問題被設(shè)計(jì)成一個(gè)函數(shù),再將這些函數(shù)組合起來完成整個(gè)任務(wù)。程序的設(shè)計(jì)主要關(guān)注如何處理數(shù)據(jù),而不是如何組織數(shù)據(jù)

    面向?qū)ο?/strong>編程中,問題被抽象成對(duì)象,每個(gè)對(duì)象有自己的屬性和方法,對(duì)象之間通過消息傳遞相互協(xié)作。程序的設(shè)計(jì)主要關(guān)注如何組織數(shù)據(jù),而不是如何處理數(shù)據(jù)

    實(shí)現(xiàn)方式方面

    面向過程編程中,數(shù)據(jù)和函數(shù)是分離的,數(shù)據(jù)的改變需要通過調(diào)用函數(shù)來實(shí)現(xiàn)。常見的面向過程編程語言包括 C、Fortran、Pascal 等。

    面向?qū)ο?/strong>編程中,數(shù)據(jù)和方法被封裝在對(duì)象內(nèi)部,對(duì)象之間通過消息傳遞來實(shí)現(xiàn)數(shù)據(jù)的操作。常見的面向?qū)ο缶幊陶Z言包括 Java、Python、C++、C# 等。

    總的來說,面向過程與面向?qū)ο蟾饔袃?yōu)缺點(diǎn),在具體應(yīng)用中需要根據(jù)問題的特點(diǎn)和實(shí)際情況選擇合適的編程范式。

    4、面向過程與面向?qū)ο蟮膬?yōu)缺點(diǎn)

    面向過程的優(yōu)點(diǎn)

  • 簡(jiǎn)單明了:面向過程的編程思想相對(duì)簡(jiǎn)單,易于理解和實(shí)現(xiàn)

    我覺得面向過程符合人的常規(guī)思想邏輯,我們?yōu)榱诉_(dá)成目標(biāo)做事情也是按步驟進(jìn)行!

  • 效率高:面向過程的編程方式更加接近底層實(shí)現(xiàn),執(zhí)行效率高。

  • 易于維護(hù):面向過程的程序結(jié)構(gòu)清晰,每個(gè)函數(shù)完成一個(gè)特定的任務(wù),容易進(jìn)行維護(hù)。

  • 面向過程的缺點(diǎn)

  • 不易擴(kuò)展:面向過程的程序結(jié)構(gòu)比較簡(jiǎn)單,難以應(yīng)對(duì)復(fù)雜的系統(tǒng)需求。
  • 可讀性差:面向過程的程序代碼往往比較冗長(zhǎng)可讀性差
  • 數(shù)據(jù)與行為耦合度高:在面向過程的程序設(shè)計(jì)中,數(shù)據(jù)與操作數(shù)據(jù)的函數(shù)是分離的,這會(huì)導(dǎo)致數(shù)據(jù)和行為之間的耦合度較高,不易維護(hù)和修改。
  • 面向?qū)ο蟮膬?yōu)點(diǎn)

  • 抽象能力強(qiáng):面向?qū)ο缶幊棠軌驅(qū)?strong>復(fù)雜的系統(tǒng)抽象成對(duì)象,更容易理解和應(yīng)對(duì)系統(tǒng)需求的變化。
  • 重用性高:面向?qū)ο缶幊讨?#xff0c;對(duì)象可以被重用,提高了程序的可維護(hù)性和可擴(kuò)展性
  • 安全性高:面向?qū)ο缶幊讨?#xff0c;對(duì)象的屬性和方法被封裝起來,保護(hù)了程序的安全性。
  • 面向?qū)ο蟮娜秉c(diǎn)

  • 技術(shù)門檻高:面向?qū)ο缶幊?strong>思想較為復(fù)雜,需要掌握面向?qū)ο蟮南嚓P(guān)概念和技術(shù)。

  • 執(zhí)行效率較低:面向?qū)ο蟮某绦驅(qū)崿F(xiàn)需要更多的內(nèi)存空間和處理時(shí)間,執(zhí)行效率相對(duì)較低。

    我覺得對(duì)象里面不是所有的屬性和方法都會(huì)用到,每次使用要加載整個(gè)對(duì)象,那么就浪費(fèi)了資源、降低了效率!

  • 設(shè)計(jì)復(fù)雜度高:面向?qū)ο缶幊绦枰O(shè)計(jì)對(duì)象的屬性和方法,設(shè)計(jì)復(fù)雜度較高,需要花費(fèi)更多的時(shí)間和精力。

    主要關(guān)注如何組織數(shù)據(jù),數(shù)據(jù)組織的合理性需要站在長(zhǎng)遠(yuǎn)、全局的角度考慮。

  • 5、面向過程與面向?qū)ο蟮氖褂脠?chǎng)景

    面向過程的使用場(chǎng)景

  • 小型應(yīng)用程序:面向過程編程思想相對(duì)簡(jiǎn)單,適用于編寫小型應(yīng)用程序。
  • 執(zhí)行效率要求高的應(yīng)用程序:面向過程編程更接近底層實(shí)現(xiàn),執(zhí)行效率較高,適用于執(zhí)行效率要求高的應(yīng)用程序。
  • 適用于處理簡(jiǎn)單的算法和數(shù)學(xué)運(yùn)算等任務(wù)。
  • 面向?qū)ο蟮氖褂脠?chǎng)景

  • 大型軟件系統(tǒng):面向?qū)ο缶幊踢m用于大型軟件系統(tǒng)的開發(fā),能夠更好地應(yīng)對(duì)系統(tǒng)需求的變化。
  • 可擴(kuò)展性要求高的應(yīng)用程序:面向?qū)ο缶幊讨械膶?duì)象可以被重用,提高了程序的可維護(hù)性和可擴(kuò)展性
  • 用戶交互性較強(qiáng)的應(yīng)用程序:面向?qū)ο缶幊讨械膶?duì)象和方法能夠更好地反映出應(yīng)用程序的實(shí)際場(chǎng)景,提高了用戶的交互體驗(yàn)
  • 6、Java 中常用的面向過程的操作

  • 控制語句:Java中常用的控制語句包括if-else、for、while、do-while等,可以實(shí)現(xiàn)程序的流程控制
  • 數(shù)組:數(shù)組是 Java 中常用的數(shù)據(jù)結(jié)構(gòu)之一,可以存儲(chǔ)多個(gè)同類型的數(shù)據(jù),可以通過下標(biāo)訪問數(shù)組中的元素。
  • 函數(shù):Java 中可以使用函數(shù)來實(shí)現(xiàn)面向過程的編程,函數(shù)可以接收參數(shù)和返回值,通過函數(shù)可以將代碼分成獨(dú)立的模塊
  • 文件操作:Java 中提供了豐富的文件操作函數(shù),可以實(shí)現(xiàn)文件的創(chuàng)建、讀取、寫入、刪除等操作。
  • 字符串操作:Java 中可以使用字符串類來實(shí)現(xiàn)字符串的連接、截取、比較等操作。
  • 輸入輸出操作:Java 中提供了豐富的輸入輸出函數(shù),可以實(shí)現(xiàn)控制臺(tái)輸入輸出、文件輸入輸出等操作。
  • 排序算法:Java 中提供了多種排序算法,如冒泡排序、快速排序、歸并排序等,可以對(duì)數(shù)組或集合進(jìn)行排序。
  • 7、Java 面向過程與面向?qū)ο缶幊淌纠?/h2>

    面向過程:求兩個(gè)證書的最大公約數(shù)

    在這個(gè)例子中,主程序使用了 Scanner 類獲取用戶輸入的兩個(gè)整數(shù),然后調(diào)用 findGcd 函數(shù)計(jì)算它們的最大公約數(shù)。findGcd 函數(shù)使用了 for 循環(huán)和 if 語句來計(jì)算最大公約數(shù)。整個(gè)程序使用了面向過程的編程方式,將任務(wù)分解為一系列的函數(shù),每個(gè)函數(shù)負(fù)責(zé)完成特定的功能。函數(shù)之間通過參數(shù)和返回值進(jìn)行數(shù)據(jù)傳遞和處理。

    import java.util.Scanner;public class GcdCalculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請(qǐng)輸入第一個(gè)數(shù):");int num1 = scanner.nextInt();System.out.print("請(qǐng)輸入第二個(gè)數(shù):");int num2 = scanner.nextInt();int gcd = findGcd(num1, num2);System.out.println("最大公約數(shù)是:" + gcd);}public static int findGcd(int num1, int num2) {int smaller = num1 < num2 ? num1 : num2;int gcd = 1;for (int i = 1; i <= smaller; i++) {if (num1 % i == 0 && num2 % i == 0) {gcd = i;}}return gcd;}}

    面向?qū)ο?#xff1a;求兩個(gè)證書的最大公約數(shù)

    在這個(gè)例子中,我們將計(jì)算最大公約數(shù)的函數(shù)findGcd放到了 GcdCalculator 類中,并且在主程序中使用了這個(gè)類來創(chuàng)建對(duì)象。這個(gè)程序使用了面向?qū)ο蟮木幊谭绞?#xff0c;將數(shù)據(jù)和操作封裝在一個(gè)類中,使用對(duì)象來調(diào)用方法,實(shí)現(xiàn)了更加直觀和靈活的編程方式。這樣,當(dāng)我們需要計(jì)算多組數(shù)據(jù)的最大公約數(shù)時(shí),只需要?jiǎng)?chuàng)建多個(gè) GcdCalculator 對(duì)象,調(diào)用它們的 findGcd 方法即可。

    import java.util.Scanner;public class GcdCalculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請(qǐng)輸入第一個(gè)數(shù):");int num1 = scanner.nextInt();System.out.print("請(qǐng)輸入第二個(gè)數(shù):");int num2 = scanner.nextInt();GcdCalculator calculator = new GcdCalculator();int gcd = calculator.findGcd(num1, num2);System.out.println("最大公約數(shù)是:" + gcd);}public int findGcd(int num1, int num2) {int smaller = num1 < num2 ? num1 : num2;int gcd = 1;for (int i = 1; i <= smaller; i++) {if (num1 % i == 0 && num2 % i == 0) {gcd = i;}}return gcd;}}

    二、面向?qū)ο?#xff1a;封裝性

    頭腦風(fēng)暴:

  • 什么是封裝性?
  • 為什么要封裝?
  • 封裝的優(yōu)缺點(diǎn)?
  • 封裝的使用場(chǎng)景?
  • 1、概述

    隱藏具體實(shí)現(xiàn) + 訪問控制,提高安全性

    面向?qū)ο蟮姆庋b性指的是將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一個(gè)中,通過類的接口來訪問和操作數(shù)據(jù),同時(shí)將數(shù)據(jù)的實(shí)現(xiàn)細(xì)節(jié)隱藏在類的內(nèi)部,不暴露給外部。

    封裝性是面向?qū)ο缶幊讨凶罨尽⒆钪匾母拍钪弧K梢杂行У?strong>保護(hù)對(duì)象的數(shù)據(jù),防止外部的直接訪問和修改,從而保證了數(shù)據(jù)的安全性和完整性。同時(shí),封裝性還可以隱藏對(duì)象的實(shí)現(xiàn)細(xì)節(jié),使得對(duì)象的使用者不必關(guān)心對(duì)象的內(nèi)部實(shí)現(xiàn)只需要關(guān)心對(duì)象提供的接口即可。

    在 Java 中,封裝性通常通過訪問修飾符(public、protected、private)來實(shí)現(xiàn)。將數(shù)據(jù)成員設(shè)置為私有的(private),并提供公有的(public)getter 和 setter 方法,這樣就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問控制和保護(hù),同時(shí)也可以方便地對(duì)數(shù)據(jù)進(jìn)行操作和修改。這樣就實(shí)現(xiàn)了類的封裝性,同時(shí)也提高了代碼的可維護(hù)性和可重用性

    2、Java 封裝性的優(yōu)缺點(diǎn)

    封裝性的優(yōu)點(diǎn)

  • 數(shù)據(jù)的安全性:封裝性可以將數(shù)據(jù)成員設(shè)置為私有的,從而防止外部直接訪問和修改數(shù)據(jù),提高數(shù)據(jù)的安全性
  • 實(shí)現(xiàn)細(xì)節(jié)的隱藏:封裝性可以將類的實(shí)現(xiàn)細(xì)節(jié)隱藏起來,只對(duì)外部提供公共接口,使得使用者不需要了解具體的實(shí)現(xiàn)細(xì)節(jié),提高了代碼的可維護(hù)性。
  • 代碼重用:封裝性可以將類的實(shí)現(xiàn)細(xì)節(jié)封裝起來,提供公共接口,使得其他程序員可以使用該類,從而提高了代碼的重用性。
  • 靈活性:封裝性可以使得程序員可以在不影響類外部的情況下修改類的實(shí)現(xiàn)細(xì)節(jié),從而提高了代碼的靈活性。
  • 封裝性的缺點(diǎn)

  • 復(fù)雜性:封裝性會(huì)增加程序的復(fù)雜度,需要花費(fèi)更多的時(shí)間和精力來設(shè)計(jì)和實(shí)現(xiàn)類
  • 開銷大:封裝數(shù)據(jù)會(huì)增加運(yùn)行時(shí)的開銷,因此在某些需要高效的場(chǎng)景中,可能需要暴露類的數(shù)據(jù)成員,從而降低代碼的開銷。
  • 訪問控制:如果訪問控制設(shè)置不當(dāng),可能會(huì)導(dǎo)致訪問限制過于嚴(yán)格或者過于寬松,從而影響代碼的安全性和可維護(hù)性。
  • 3、Java 封裝性的使用場(chǎng)景

  • 保護(hù)數(shù)據(jù)安全:將類的數(shù)據(jù)成員設(shè)置為私有的,通過公共接口提供訪問和修改數(shù)據(jù)的方法,可以防止數(shù)據(jù)被非法訪問和修改。
  • 隱藏實(shí)現(xiàn)細(xì)節(jié):將類的實(shí)現(xiàn)細(xì)節(jié)封裝起來,只對(duì)外部提供公共接口,可以隱藏類的具體實(shí)現(xiàn)細(xì)節(jié),提高代碼的可維護(hù)性和可重用性。
  • 限制訪問權(quán)限:通過控制訪問修飾符來限制成員變量或成員方法的訪問權(quán)限,從而達(dá)到安全保護(hù)和代碼封裝的目的。
  • 簡(jiǎn)化接口:通過封裝可以簡(jiǎn)化外部接口,隱藏類的實(shí)現(xiàn)細(xì)節(jié),降低類之間的耦合度,提高系統(tǒng)的靈活性。
  • 提高可維護(hù)性:將類的實(shí)現(xiàn)細(xì)節(jié)封裝起來,可以使得修改實(shí)現(xiàn)細(xì)節(jié)對(duì)外部代碼的影響最小化,從而提高代碼的可維護(hù)性。
  • 提高代碼復(fù)用性:將類的實(shí)現(xiàn)細(xì)節(jié)封裝起來,可以使得其他程序員可以使用該類,從而提高了代碼的復(fù)用性。
  • 4、Java 不適用封裝性的場(chǎng)景

  • 必須公開的數(shù)據(jù):如果某個(gè)數(shù)據(jù)成員需要被多個(gè)類訪問或修改,而且沒有安全性的問題,那么將其設(shè)置為 public 屬性可能更合適,因?yàn)榉庋b數(shù)據(jù)會(huì)增加代碼的復(fù)雜性和運(yùn)行時(shí)的開銷
  • 共享數(shù)據(jù):如果多個(gè)對(duì)象之間需要共享某些數(shù)據(jù),那么將其設(shè)置為 public 屬性可能更為合適,因?yàn)榉庋b數(shù)據(jù)會(huì)導(dǎo)致多個(gè)對(duì)象之間無法訪問共享數(shù)據(jù)。
  • 高效性的要求:封裝數(shù)據(jù)會(huì)增加代碼的復(fù)雜性和運(yùn)行時(shí)的開銷,因此在某些需要高效的場(chǎng)景中,可能需要暴露類的數(shù)據(jù)成員,從而降低代碼的開銷。
  • 5、Java 中封裝性的最佳實(shí)踐是什么

  • 使用 private 修飾符來限制屬性的訪問。這樣可以防止類外部的代碼直接訪問屬性,保證了數(shù)據(jù)的安全性和完整性。
  • 提供 public 的 setter 和 getter 方法來訪問屬性。setter 方法可以用于修改屬性的值,getter 方法可以用于獲取屬性的值。通過setter 和 getter 方法可以實(shí)現(xiàn)對(duì)屬性的控制和訪問,從而確保屬性的正確性和可靠性。
  • 避免使用 public 屬性或方法。直接暴露 public 屬性或方法會(huì)破壞類的封裝性,使得類的實(shí)現(xiàn)細(xì)節(jié)暴露在外部,容易被不良代碼所利用。如果確實(shí)需要暴露屬性或方法,可以考慮使用 protected 或 default 訪問修飾符來限制訪問。
  • 盡量不要使用 protected 訪問修飾符。盡管 protected 修飾符可以讓子類訪問父類的屬性和方法,但是過多的使用會(huì)破壞封裝性,使得類的實(shí)現(xiàn)變得復(fù)雜和脆弱
  • 使用 final 修飾符來限制屬性和方法的修改。final 修飾符可以防止屬性和方法被修改,從而保證了代碼的穩(wěn)定性和可靠性。當(dāng)然,使用 final 修飾符需要謹(jǐn)慎,因?yàn)樗赡軙?huì)限制代碼的靈活性和可擴(kuò)展性
  • 三、面向?qū)ο?#xff1a;繼承性

    頭腦風(fēng)暴:

  • 什么是繼承性?
  • 為什么要集成?
  • 繼承的優(yōu)缺點(diǎn)?
  • 繼承的適用場(chǎng)景和不適用場(chǎng)景?
  • 1、概述

    代碼復(fù)用:繼承其他類的屬性和方法,增強(qiáng)代碼復(fù)用!

    Java 面向?qū)ο缶幊讨械睦^承性是指,一個(gè)類可以從已有的類中繼承屬性和方法,從而可以擴(kuò)展已有的類,減少重復(fù)代碼,提高代碼的復(fù)用性和可維護(hù)性

    在 Java 中,一個(gè)類可以通過 extends 關(guān)鍵字繼承另一個(gè)類的屬性和方法。被繼承的類稱為父類或超類,繼承它的類稱為子類或派生類。子類可以訪問父類中的非私有成員(即public、protected和默認(rèn)訪問級(jí)別的成員),并且可以擴(kuò)展父類中的屬性和方法,也可以重寫父類中的方法。

    在繼承中,子類繼承了父類的屬性和方法,可以使用父類的實(shí)例變量和方法,從而減少代碼的冗余。另外,繼承還可以實(shí)現(xiàn)代碼的重用和擴(kuò)展,即子類可以擴(kuò)展父類的屬性和方法,并添加新的屬性和方法。

    2、Java 繼承性的優(yōu)缺點(diǎn)

    繼承的優(yōu)點(diǎn)

  • 提高代碼的復(fù)用性:可以重用已有的代碼,減少代碼冗余,提高代碼的復(fù)用性
  • 提高代碼的可維護(hù)性:可以通過繼承來實(shí)現(xiàn)代碼的擴(kuò)展和修改,而不必修改原有的代碼。
  • 實(shí)現(xiàn)多態(tài):子類可以重寫父類的方法,從而實(shí)現(xiàn)多態(tài)
  • 繼承的缺點(diǎn)

  • 多層繼承可能導(dǎo)致代碼的復(fù)雜性增加,出現(xiàn)混亂的繼承關(guān)系
  • 子類依賴于父類,一旦父類發(fā)生變化,可能會(huì)影響到子類的正常運(yùn)行。
  • 破壞封裝性:繼承會(huì)繼承父類的所有屬性和方法,包括私有的屬性和方法,這可能會(huì)破壞父類的封裝性
  • 3、Java 繼承性的適用場(chǎng)景

  • 代碼復(fù)用:當(dāng)多個(gè)類之間有相同的屬性和方法時(shí),可以將這些屬性和方法定義在一個(gè)父類中,然后讓子類繼承這個(gè)父類,從而減少代碼的冗余,提高代碼的可維護(hù)性和可重用性
  • 擴(kuò)展功能:當(dāng)需要對(duì)已有的類進(jìn)行功能擴(kuò)展時(shí),可以通過繼承來實(shí)現(xiàn)。子類可以擴(kuò)展父類的功能,而不必修改父類的代碼。
  • 實(shí)現(xiàn)多態(tài):通過繼承可以實(shí)現(xiàn)多態(tài)性,即不同的子類對(duì)象可以調(diào)用同一個(gè)方法,實(shí)現(xiàn)不同的功能
  • 4、Java 繼承性的不適用場(chǎng)景

  • 過度使用:過度使用繼承可能會(huì)導(dǎo)致代碼的復(fù)雜性增加,出現(xiàn)混亂的繼承關(guān)系。
  • 父類變化:當(dāng)父類發(fā)生變化時(shí),可能會(huì)影響到子類的正常運(yùn)行,因此需要謹(jǐn)慎使用繼承。
  • 類的層次過多:如果繼承的層數(shù)太多,會(huì)導(dǎo)致代碼的可讀性可維護(hù)性降低。
  • 5、學(xué)習(xí) Java 的繼承性應(yīng)注意哪些問題

  • 繼承關(guān)系的建立:需要明確父類和子類的關(guān)系,以及如何定義父類和子類的屬性和方法
  • 方法的覆蓋:子類可以覆蓋父類的方法,需要注意方法的返回值、參數(shù)類型和名稱等信息。
  • 訪問修飾符:子類繼承父類后,可以訪問父類的公有方法和屬性,但無法訪問私有方法和屬性。
  • 繼承層數(shù)的問題:如果繼承的層數(shù)太多,會(huì)影響代碼的可讀性和可維護(hù)性。
  • 多態(tài)性的應(yīng)用:在使用繼承時(shí),需要注意多態(tài)性的應(yīng)用,即子類對(duì)象可以賦值給父類引用,從而實(shí)現(xiàn)不同的行為。
  • 構(gòu)造方法的調(diào)用:子類繼承父類后,需要調(diào)用父類的構(gòu)造方法,可以使用super關(guān)鍵字來調(diào)用父類的構(gòu)造方法。
  • 父類和子類的實(shí)例化:在使用繼承時(shí),需要注意父類和子類的實(shí)例化方式,即子類對(duì)象在實(shí)例化時(shí),會(huì)自動(dòng)調(diào)用父類的構(gòu)造方法。
  • 6、Java 中繼承性的最佳實(shí)踐是什么

  • 使用繼承時(shí),需要明確父類和子類之間的關(guān)系,確保繼承關(guān)系的正確性和可讀性。

  • 父類應(yīng)該是穩(wěn)定、可靠的基類,子類應(yīng)該是特定的派生類。因此,在定義父類時(shí),需要遵循單一職責(zé)原則,盡量保持類的簡(jiǎn)潔和高內(nèi)聚性

  • 在使用繼承時(shí),需要考慮代碼的可維護(hù)性和可擴(kuò)展性。因此,需要注意繼承層數(shù)的問題,以及如何避免過度使用繼承。

  • 在子類中覆蓋父類的方法時(shí),需要遵循里氏替換原則,確保子類對(duì)象可以替換父類對(duì)象,而不會(huì)影響代碼的正確性。

  • 在使用繼承時(shí),需要注意多態(tài)性的應(yīng)用,即子類對(duì)象可以賦值給父類引用,從而實(shí)現(xiàn)不同的行為。

  • 在定義父類和子類的屬性和方法時(shí),需要考慮訪問修飾符的問題,以便確保代碼的封裝性和安全性。

    在 Java 中,父類的屬性和方法一般使用訪問修飾符 protected 或 public 。

  • 四、面向?qū)ο?#xff1a;多態(tài)性

    1、概述

    Java 中的多態(tài)性指的是同一種類型的對(duì)象,在不同的情況下會(huì)表現(xiàn)出不同的行為。具體來說,多態(tài)性可以分為兩種類型:靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性。

    靜態(tài)多態(tài)性是指在編譯期確定調(diào)用哪個(gè)方法,例如方法重載(overloading),即一個(gè)類中定義了多個(gè)方法,它們具有相同的名稱,但是參數(shù)列表不同。在調(diào)用這些方法時(shí),編譯器會(huì)根據(jù)參數(shù)列表的不同選擇相應(yīng)的方法。

    動(dòng)態(tài)多態(tài)性是指在運(yùn)行期根據(jù)實(shí)際情況選擇調(diào)用哪個(gè)方法,例如方法重寫(overriding),即子類重寫了父類的某個(gè)方法。在調(diào)用這個(gè)方法時(shí),編譯器無法確定具體調(diào)用哪個(gè)方法,需要在運(yùn)行期根據(jù)對(duì)象的實(shí)際類型來決定。

    多態(tài)性可以讓程序更加靈活,可以通過繼承和接口實(shí)現(xiàn),使代碼更加模塊化和可擴(kuò)展。

    2、Java 多態(tài)性的優(yōu)缺點(diǎn)

    多態(tài)性優(yōu)點(diǎn)

  • 提高代碼的可復(fù)用性:通過多態(tài)性,可以將同一個(gè)接口的不同實(shí)現(xiàn)作為不同的模塊,方便代碼復(fù)用和維護(hù)
  • 提高代碼的可擴(kuò)展性:多態(tài)性能夠很好地支持代碼擴(kuò)展,可以在不改變?cè)写a的情況下,通過添加新的實(shí)現(xiàn)類或子類,擴(kuò)展代碼的功能。
  • 提高代碼的靈活性:多態(tài)性讓程序在運(yùn)行時(shí)根據(jù)實(shí)際情況決定調(diào)用哪個(gè)方法或?qū)崿F(xiàn),使程序更加靈活。
  • 多態(tài)性缺點(diǎn)

  • 可能會(huì)降低程序的執(zhí)行效率:由于在運(yùn)行時(shí)需要判斷對(duì)象的實(shí)際類型,可能會(huì)增加程序的運(yùn)行時(shí)間和內(nèi)存開銷。
  • 可能會(huì)增加程序的復(fù)雜性:多態(tài)性使得程序變得更加抽象和難以理解,需要程序員對(duì)代碼有更深入的理解和把握。
  • 3、Java 多態(tài)性的適用場(chǎng)景

  • 接口和抽象類的使用:接口和抽象類定義了一組抽象的方法,具體的實(shí)現(xiàn)由子類實(shí)現(xiàn),從而實(shí)現(xiàn)多態(tài)性。
  • 方法的重載和重寫方法重載是指在同一個(gè)類中定義了多個(gè)同名但不同參數(shù)類型和個(gè)數(shù)的方法,方法重寫是指在不同的類中定義了同名同參數(shù)類型和個(gè)數(shù)的方法,這兩種方式都可以實(shí)現(xiàn)多態(tài)性。
  • 泛型編程:泛型編程可以使用參數(shù)化類型來編寫通用的代碼,提高代碼的復(fù)用性和擴(kuò)展性
  • 運(yùn)行時(shí)類型識(shí)別:通過運(yùn)行時(shí)類型識(shí)別,可以在運(yùn)行時(shí)根據(jù)對(duì)象的實(shí)際類型動(dòng)態(tài)地選擇調(diào)用哪個(gè)方法或?qū)崿F(xiàn),實(shí)現(xiàn)多態(tài)性。
  • 4、Java 多態(tài)性的不適用場(chǎng)景

  • 構(gòu)造函數(shù)不具有多態(tài)性:構(gòu)造函數(shù)是創(chuàng)建對(duì)象的方法,在對(duì)象創(chuàng)建之前就已經(jīng)確定了對(duì)象的類型,因此構(gòu)造函數(shù)不具有多態(tài)性。
  • 靜態(tài)方法不具有多態(tài)性:靜態(tài)方法是類的方法,不屬于對(duì)象,在編譯時(shí)就已經(jīng)確定了調(diào)用的方法,因此靜態(tài)方法不具有多態(tài)性。
  • final 方法不具有多態(tài)性:final 方法在編譯時(shí)就已經(jīng)確定了調(diào)用的方法,不能被子類重寫,因此不具有多態(tài)性。
  • private 方法不具有多態(tài)性:private 方法只能在本類中調(diào)用,不能被子類調(diào)用,因此不具有多態(tài)性。
  • 5、學(xué)習(xí) Java 的多態(tài)性應(yīng)注意哪些問題

  • 熟悉繼承和多態(tài)的概念:多態(tài)性是基于繼承實(shí)現(xiàn)的,因此必須先掌握繼承的概念和使用方法。

  • 熟悉抽象類和接口:在實(shí)現(xiàn)多態(tài)性時(shí),抽象類和接口是非常重要的工具。因此,必須熟悉如何定義和使用抽象類和接口。

  • 理解動(dòng)態(tài)綁定的概念:多態(tài)性實(shí)現(xiàn)的關(guān)鍵是動(dòng)態(tài)綁定,即在運(yùn)行時(shí)動(dòng)態(tài)地選擇適當(dāng)?shù)姆椒āR虼?#xff0c;必須理解動(dòng)態(tài)綁定的原理和機(jī)制。

  • 理解重寫方法的概念:在多態(tài)性中,子類可以重寫父類的方法。因此,必須理解如何在子類中重寫方法,以及如何在子類中調(diào)用父類的方法。

  • 熟悉多態(tài)性的應(yīng)用場(chǎng)景:多態(tài)性可以應(yīng)用于很多場(chǎng)景,比如實(shí)現(xiàn)不同類型的數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)多種算法、實(shí)現(xiàn)插件架構(gòu)等。因此,必須熟悉多態(tài)性的應(yīng)用場(chǎng)景,以便在實(shí)際編程中靈活應(yīng)用。

  • 注意多態(tài)性的性能問題:多態(tài)性是基于動(dòng)態(tài)綁定實(shí)現(xiàn)的,因此會(huì)帶來一定的性能開銷。因此,在設(shè)計(jì)和實(shí)現(xiàn)程序時(shí),應(yīng)注意多態(tài)性的性能問題,避免出現(xiàn)性能瓶頸。

    動(dòng)態(tài)綁定:Java 中的動(dòng)態(tài)綁定是指在程序運(yùn)行期間根據(jù)對(duì)象的實(shí)際類型進(jìn)行方法調(diào)用的過程。具體來說,Java 中的動(dòng)態(tài)綁定是通過虛擬方法表實(shí)現(xiàn)的,當(dāng)程序執(zhí)行時(shí),虛擬機(jī)會(huì)根據(jù)對(duì)象的實(shí)際類型在虛擬方法表中查找方法,以確定調(diào)用哪個(gè)方法。

    Java 中的動(dòng)態(tài)綁定可以實(shí)現(xiàn)多態(tài)性,使得不同類型的對(duì)象可以以同樣的方式進(jìn)行方法調(diào)用,這大大提高了代碼的復(fù)用性和靈活性。同時(shí),動(dòng)態(tài)綁定還可以提高代碼的可維護(hù)性和可擴(kuò)展性,因?yàn)橹恍枰薷姆椒ǖ膶?shí)現(xiàn),而不需要修改調(diào)用該方法的代碼。

    需要注意的是,動(dòng)態(tài)綁定只適用于實(shí)例方法,靜態(tài)方法和 final 方法不會(huì)被動(dòng)態(tài)綁定,因?yàn)樗鼈兊恼{(diào)用是在編譯期間就被解析的。此外,動(dòng)態(tài)綁定也會(huì)帶來一些性能損失,因?yàn)槊看握{(diào)用方法時(shí)都需要在虛擬方法表中進(jìn)行查找,而這個(gè)過程是比較耗時(shí)的。

  • 6、Java 中多態(tài)性的最佳實(shí)踐是什么

  • 使用接口或抽象類定義多態(tài)類型:在程序設(shè)計(jì)時(shí),應(yīng)當(dāng)優(yōu)先考慮定義接口或抽象類作為多態(tài)類型,這樣可以提高代碼的可擴(kuò)展性和可維護(hù)性,同時(shí)還能降低代碼的耦合度。
  • 遵循里氏替換原則:子類必須能夠完全替換掉父類,并且不影響程序的正確性,這就是里氏替換原則。在實(shí)際開發(fā)中,應(yīng)當(dāng)遵循里氏替換原則,確保程序能夠正確地使用多態(tài)性。
  • 盡量使用抽象類而不是具體類作為多態(tài)類型:抽象類可以定義一些通用的行為,而具體類則會(huì)實(shí)現(xiàn)這些行為,因此使用抽象類作為多態(tài)類型可以更好地實(shí)現(xiàn)代碼復(fù)用。
  • 盡量使用方法重寫而不是方法重載:在實(shí)現(xiàn)多態(tài)性時(shí),應(yīng)當(dāng)優(yōu)先考慮使用方法重寫而不是方法重載。方法重載只是在同一個(gè)類中實(shí)現(xiàn)多態(tài)性,而方法重寫可以在不同的類中實(shí)現(xiàn)多態(tài)性,提高了程序的可擴(kuò)展性。
  • 使用向上轉(zhuǎn)型進(jìn)行參數(shù)傳遞:在實(shí)際開發(fā)中,應(yīng)當(dāng)使用向上轉(zhuǎn)型進(jìn)行參數(shù)傳遞,這樣可以降低代碼的耦合度,提高程序的可維護(hù)性和可擴(kuò)展性。
  • 避免類型檢查和類型轉(zhuǎn)換:在實(shí)現(xiàn)多態(tài)性時(shí),應(yīng)當(dāng)避免使用類型檢查和類型轉(zhuǎn)換,因?yàn)檫@樣會(huì)降低程序的可維護(hù)性和可擴(kuò)展性。如果必須要使用類型檢查和類型轉(zhuǎn)換,應(yīng)當(dāng)盡量將它們封裝到一個(gè)方法中,避免在程序中重復(fù)使用。
  • 總結(jié)

    以上是生活随笔為你收集整理的Java面向对象回顾的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。