Java基礎(十二)面向對象編程 OOP

一、抽象數據類型

1.面向對象基本概念

1. 面向對象

面向對象程序設計(OOP)是一種基于對象概念的軟件開發方法,是目前軟件開發的主流方式。

常見面向對象的語言:C++ 、Python 、Java
常見面向過程的語言:C

面向對象的三大特征:封裝、繼承、多態。

封裝(Encapsulation):封裝是面向對象編程的核心概念之一。它指的是將數據和操作封裝在類中,并限制對數據的直接訪問。通過封裝,可以隱藏實現細節,提高代碼的安全性和可維護性。

繼承(Inheritance):繼承是面向對象編程中實現代碼重用的機制之一。通過繼承,一個類可以繼承另一個類的屬性和方法,并且可以添加新的屬性和方法。這樣可以實現代碼的層次化組織,提高代碼的可復用性。

多態(Polymorphism):多態是面向對象編程中的一個特性,它允許使用統一的接口處理不同的對象類型。多態可以通過繼承和接口實現,通過動態綁定在運行時確定要調用的方法。這種靈活性有助于編寫可擴展的代碼。

2. 對象

在面向對象的世界中認為萬事萬物皆對象。對象就是具體的某一事物。

3. 類.

類是具有相同的狀態和相同的行為的一組對象的集合。


類是多個對象進行綜合抽象的結果,是實體對象的概念模型,而一個對象是一個類的實例。


2. 定義類

1. 定義類

類的定義由關鍵字 class 開始,后面跟著類名。以下是一個簡單的類的定義示例:

public class Car {// 類的成員變量String model;int year;// 類的方法public void start() {// 方法體System.out.println("Car started");}
}

2. 類的成員

類的成員包括成員變量和方法。成員變量是類的屬性,用于存儲對象的狀態。方法是類的行為,用于定義對象的操作。

在上面的示例中,modelyear 是類的成員變量,而 start() 是類的方法。

3. 靜態初始化

靜態初始化是指在類加載時對靜態成員變量進行初始化,在整個程序生命周期內只執行一次。可以使用靜態代碼塊來實現靜態初始化。

以下是一個靜態初始化的示例:

public class MyClass {static int myStaticVariable;static {myStaticVariable = 10;System.out.println("Static initialization block executed");}
}

4. 實例初始化

實例初始化是指在每次創建對象時對實例成員變量進行初始化。可以使用構造函數或實例初始化塊來實現實例初始化。

以下是一個實例初始化的示例:

public class MyClass {int myInstanceVariable;{myInstanceVariable = 20;System.out.println("Instance initialization block executed");}public MyClass() {System.out.println("Constructor executed");}
}

4. 構造函數

構造函數是一種特殊類型的方法,用于創建和初始化對象。它具有與類相同的名稱,并且沒有返回類型。

以下是一個具有構造函數的示例:

public class Person {String name;public Person(String n) {name = n;System.out.println("Person object created with name: " + name);}
}

3. static 作用

static 關鍵字表示靜態成員,它可以應用于成員變量、方法和代碼塊。靜態成員屬于類本身,而不是對象實例。它們在類加載時被初始化,并且可以通過類名直接訪問。

以下是靜態成員的示例:

public class MyClass {static int myStaticVariable = 5;static void myStaticMethod() {System.out.println("Static method");}
}

實例(非靜態/實例)

實例或非靜態成員屬于對象實例,每個對象都擁有自己的一份實例成員變量。只有通過創建對象的實例才能訪問實例成員。

以下是實例成員的示例:

public class MyClass {int myInstanceVariable = 10;void myInstanceMethod() {System.out.println("Instance method");}
}

4. 構造重載

構造重載是指在同一個類中定義多個具有不同參數列表的構造函數。這樣可以根據參數的不同創建不同的對象。

以下是構造重載的示例:

public class DemoPerson {public String name;public String gender;public int age;// 第一種構造方法重載:定義無參構造方法public DemoPerson() {this.name = "小羊呆呆";System.out.println(name);}// 第二種構造方法重載:定義帶參構造方法public DemoPerson(String name) {System.out.println("你好!" + name);this.name = name;}// 第一種work() 方法重載,無參的 work() 方法public void work() {System.out.println(this.name + "的工作理念是:工作讓生活更美好!");}// 第二種work() 方法重載,帶參的 work() 方法public void work(String content) {System.out.println(this.name + "," + this.gender + "," + this.age + "歲的工作理念是:" + content);}public static void main(String[] args) {DemoPerson p1 = new DemoPerson("犯困桃子");DemoPerson p2 = new DemoPerson();p2.name = "康盛科技人才";p2.gender = "男";p2.age = 20;p1.work();p2.work("冒泡、摸魚、打游戲。");}
}

輸出:

你好!犯困桃子
小羊呆呆
犯困桃子的工作理念是:工作讓生活更美好!
康盛科技人才,男,20歲的工作理念是:冒泡、摸魚、打游戲。

5. 實例化的過程

實例化是指創建對象的過程。在實例化過程中,首先會進行靜態初始化(只執行一次),然后進行實例初始化,最后執行構造函數。

以下是實例化過程的示例:

public class MyClass {static int myStaticVariable = 5;int myInstanceVariable;static {System.out.println("Static initialization block executed");}{System.out.println("Instance initialization block executed");}public MyClass() {System.out.println("Constructor executed");}public static void main(String[] args) {MyClass obj = new MyClass();}
}

輸出:

Static initialization block executed
Instance initialization block executed
Constructor executed

6. 遮蔽(shadowing)

遮蔽是指在子類或局部作用域中使用與父類或外部作用域中同名的變量,從而隱藏了原有的變量。

以下是遮蔽的示例:

public class ParentClass {int x = 10;public void printX() {int x = 20;  // 局部變量 x 遮蔽了成員變量 xSystem.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);}
}public class ParentClass {int x = 10;// 遮蔽(shadowing)public void printX(int x) {System.out.println("Local x: " + x);System.out.println("例子 x: " + this.x);}public static void main(String[] args) {ParentClass p = new ParentClass();p.x = 200;p.printX(20);}
}
/*
Local x: 20
例子 x: 200
*/public class ChildClass extends ParentClass {int x = 30;public void printX() {int x = 40;  // 局部變量 x 遮蔽了父類的成員變量 xSystem.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);System.out.println("Parent x: " + super.x);}
}

1. this 解決遮蔽問題

this 關鍵字可以用于引用當前對象,通過 this 可以訪問當前對象的成員變量。

以下是使用 this 解決遮蔽問題的示例:

public class ParentClass {int x = 10;public void printX() {int x = 20;System.out.println("Local x: " + x);System.out.println("Instance x: " + this.x);  // 使用 this 引用成員變量 x}
}

2. className.staticField 解決遮蔽問題

通過使用類名限定的方式,可以訪問被遮蔽的成員變量。

以下是使用類名限定解決遮蔽問題的示例:

public class ParentClass {static int x = 10;public void printX() {int x = 20;System.out.println("Local x: " + x);System.out.println("Static x: " + ParentClass.x);  // 使用類名限定訪問靜態變量 x}
}

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

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

相關文章

計算機競賽 python+opencv+機器學習車牌識別

0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 基于機器學習的車牌識別系統 🥇學長這里給一個題目綜合評分(每項滿分5分) 難度系數:4分工作量:4分創新點:3分 該項目較為新穎,適…

使用插件實現pdf,word預覽功能

效果 代碼&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…

如何在Vue表單處理中實現表單的條件渲染

在Vue開發中&#xff0c;我們經常會遇到需要根據某些條件來渲染表單的情況。這種情況下&#xff0c;我們需要靈活地根據條件來展示或隱藏一些表單字段。本文將介紹如何在Vue中實現表單的條件渲染&#xff0c;并提供了代碼示例。 一、使用v-if指令實現簡單的條件渲染 在Vue中&a…

2023年網絡安全比賽--綜合滲透測試(超詳細)

一、競賽時間 180分鐘 共計3小時 二、競賽階段 競賽階段 任務階段 競賽任務 競賽時間 分值 1.掃描目標靶機將靶機開放的所有端口,當作flag提交(例:21,22,23); 2.掃描目標靶機將靶機的http服務版本信息當作flag提交(例:apache 2.3.4); 3.靶機網站存在目錄遍歷漏洞,請將…

Linux設備樹詳解

Linux 設備樹詳解 Linux 操作系統早期是針對個人電腦設備而開發的操作系統&#xff0c;而個人電腦處理器產商較為單一&#xff08;例如只有 Intel&#xff0c;AMD&#xff09;同時個人電腦產商均使用 Intel 或 AMD 制造的處理器&#xff0c;業界形成了統一的總線/硬件接口標準…

JavaScript進階 第二天

深入對象內置構造函數 一. 深入對象 創建對象三種方式構造函數實例成員&靜態成員 1.1 創建對象三種方式 ① 利用對象字面量創建對象 const o {name: 哈哈 } ② 利用new Object 創建對象 const o new Object({ name: 哈哈 }) ③ 構造函數創建對象 1.2 構造函數 …

探索規律:Python地圖數據可視化藝術

文章目錄 一 基礎地圖使用二 國內疫情可視化圖表2.1 實現步驟2.2 完整代碼2.3 運行結果 一 基礎地圖使用 使用 Pyecharts 構建地圖可視化也是很簡單的。Pyecharts 支持多種地圖類型&#xff0c;包括普通地圖、熱力圖、散點地圖等。以下是一個構建簡單地圖的示例&#xff0c;以…

認識Transformer:入門知識

視頻鏈接&#xff1a; https://www.youtube.com/watch?vugWDIIOHtPA&listPLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index60 文章目錄 Self-Attention layerMulti-head self-attentionPositional encodingSeq2Seq with AttentionTransformerUniversal Transformer Seq2Seq …

淺談 EMP-SSL + 代碼解讀:自監督對比學習的一種極簡主義風

論文鏈接&#xff1a;https://arxiv.org/pdf/2304.03977.pdf 代碼&#xff1a;https://github.com/tsb0601/EMP-SSL 其他學習鏈接&#xff1a;突破自監督學習效率極限&#xff01;馬毅、LeCun聯合發布EMP-SSL&#xff1a;無需花哨trick&#xff0c;30個epoch即可實現SOTA 主要…

08 qt進程和網絡編程(cs模型)

一 、qt進程 qt中進程最主要的任務就是啟動額外應用程序 并且跟他們之間通信。進程類為QProcess 定義用途Header:#include qmake:QT += coreInherits:QIODevice//繼承于IO設備類1.1 QProcess基本使用 第一步:創建一個QProcess對象 // process = new QProcess(this); //說明…

資訊速遞 | ArkUI-X 預覽版已正式開源!

OpenHarmony項目群技術指導委員會&#xff08;以下簡稱“TSC”&#xff09;-跨平臺應用開發框架TSG所孵化項目 —— ArkUI-X&#xff0c;近期已正式開源 &#xff0c;開發者基于一套主代碼&#xff0c;就可以將在OpenHarmony上開發的精美、高性能應用同時運行在Android、iOS等其…

LNMP環境搭建wordpress以及跳轉后臺報404解決

基于上文配置好的LNMP環境繼續搭建wordpress 目錄 一.到官網下載tar.gz包&#xff0c;并上傳到Linux上&#xff0c;也可以通過復制鏈接地址進行下載 二. 將wordpress中的所有文件移動到你nginx.conf中指定目錄中 三.為wordpress配置數據庫 四.到瀏覽器進行注冊 1.剛開始…

maven編譯始終提示無效的目標發行版的解決方法

摘自個人印象筆記2021-05-07&#xff1a;https://app.yinxiang.com/fx/55e1d5f4-aeea-446a-a768-0f1a48195f5b(圖顯示不完整可查看原筆記內容)1&#xff1a;確保IDE中的編譯版本正確 在idea中&#xff0c;主要看項目屬性中和setting的java compiler中對應的jdk版本是否正確&…

好用的安卓手機投屏到mac分享

工具推薦&#xff1a;scrcpy github地址&#xff1a;https://github.com/Genymobile/scrcpy/tree/master mac使用方式 安裝環境&#xff0c;打開terminal&#xff0c;執行以下命令&#xff0c;沒有brew的先安裝brew brew install scrcpy brew install android-platform-too…

學習 Iterator 迭代器

今天看到一個面試題&#xff0c; 讓下面解構賦值成立。 let [a,b] {a:1,b:2} 如果我們直接在瀏覽器輸出這行代碼&#xff0c;會直接報錯&#xff0c;說是 {a:1,b:2} 不能迭代。 看了es6文檔后&#xff0c;具有迭代器的就一下幾種類型&#xff0c;沒有Object類型&#xff0c;…

404. 左葉子之和

給定二叉樹的根節點 root &#xff0c;返回所有左葉子之和。 示例 1&#xff1a; 輸入: root [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中&#xff0c;有兩個左葉子&#xff0c;分別是 9 和 15&#xff0c;所以返回 24示例 2: 輸入: root [1] 輸出: 0提示: 節點…

【NetCore】09-中間件

文章目錄 中間件&#xff1a;掌控請求處理過程的關鍵1. 中間件1.1 中間件工作原理1.2 中間件核心對象 2.異常處理中間件:區分真異常和邏輯異常2.1 處理異常的方式2.1.1 日常錯誤處理--定義錯誤頁的方法2.1.2 使用代理方法處理異常2.1.3 異常過濾器 IExceptionFilter2.1.4 特性過…

go web框架 gin-gonic源碼解讀02————router

go web框架 gin-gonic源碼解讀02————router 本來想先寫context&#xff0c;但是發現context能簡單講講的東西不多&#xff0c;就準備直接和router合在一起講好了 router是web服務的路由&#xff0c;是指講來自客戶端的http請求與服務器端的處理邏輯或者資源相映射的機制。&…

react實現對數組做增刪改操作自定義hook

需求 實現對數組的增刪改操作。 實現 import { useState } from react;const useArray (currList) > {const [list, setList] useState(currList);// 增const addItem (item) > {setList([...list, item]);};// 刪const removeItem (idx) > {const _arr [...l…

實戰指南,SpringBoot + Mybatis 如何對接多數據源

系列文章目錄 MyBatis緩存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 啟動到SQL執行全流程 數據庫操作不再困難&#xff0c;MyBatis動態Sql標簽解析 從零開始&#xff0c;手把手教你搭建Spring Boot后臺工程并說明 Spring框架與SpringBoot的關聯與區別 Spring監聽器…