java面向對象編程特性概述

目錄

1. 類和對象

2. 封裝(Encapsulation)

3. 繼承(Inheritance)

4. 多態(Polymorphism)

5. 抽象(Abstraction)

(1). 抽象類(Abstract Class)

(2).接口(Interface)

6. 關聯、聚合和組合

?總結


Java 是一種面向對象編程(OOP)語言,面向對象編程是一種編程范式,基于“對象”的概念,對象可以包含數據和操作數據的方法。Java 的面向對象特性主要包括以下幾個方面:

1. 類和對象


類(Class):類是對象的藍圖或模板,定義了對象的屬性和行為。類包含字段(屬性)和方法(行為)。

對象(Object):對象是類的實例,具有狀態和行為。對象的狀態由字段的值表示,行為由方法定義。

// 定義一個類
class Dog {// 字段(屬性)String name;int age;// 方法(行為)void bark() {System.out.println(name + " is barking!");}
}// 創建對象
public class Main {public static void main(String[] args) {Dog myDog = new Dog();myDog.name = "Buddy";myDog.age = 3;myDog.bark();  // 輸出: Buddy is barking!}
}

2. 封裝(Encapsulation)


封裝是將對象的字段和方法隱藏在類內部,只通過公共接口與外界交互。通過使用訪問修飾符(如 private, public, protected),可以控制對類的成員的訪問。

class Dog {private String name;private int age;// Getter 和 Setter 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

3. 繼承(Inheritance)


繼承允許一個類(子類)繼承另一個類(父類)的字段和方法,從而實現代碼重用。子類可以擴展或修改父類的行為

// 父類
class Animal {void eat() {System.out.println("This animal eats food.");}
}// 子類
class Dog extends Animal {void bark() {System.out.println("The dog barks.");}
}public class Main {public static void main(String[] args) {Dog myDog = new Dog();myDog.eat();  // 繼承自 Animal 類myDog.bark(); // Dog 類自己的方法}
}

4. 多態(Polymorphism)

多態是指同一個方法在不同對象中有不同的實現。多態可以通過方法重載(Overloading)和方法重寫(Overriding)來實現。

方法重載:在同一個類中,方法名相同但參數列表不同。

方法重寫:子類重寫父類的方法,提供不同的實現。

class Animal {void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Overridevoid sound() {System.out.println("Dog barks");}
}class Cat extends Animal {@Overridevoid sound() {System.out.println("Cat meows");}
}public class Main {public static void main(String[] args) {Animal myAnimal = new Animal();  // Animal 對象Animal myDog = new Dog();        // Dog 對象Animal myCat = new Cat();        // Cat 對象myAnimal.sound();  // 輸出: Animal makes a soundmyDog.sound();     // 輸出: Dog barksmyCat.sound();     // 輸出: Cat meows}
}

5. 抽象(Abstraction)

什么是抽象?

抽象是面向對象編程的核心概念之一,它的目的是隱藏復雜的實現細節,只暴露必要的部分。通過抽象,我們可以定義一個通用的模板,讓子類去實現具體的細節。

在 Java 中,抽象可以通過以下兩種方式實現:

(1).抽象類(Abstract Class)? ? ?(2).接口(Interface)

(1). 抽象類(Abstract Class)

特點

?抽象類用 abstract 關鍵字修飾。

?抽象類不能直接實例化,即不能創建抽象類的對象。

?抽象類可以包含:

? ? 抽象方法:沒有方法體的方法,必須由子類實現。

? ? 具體方法:有方法體的方法,子類可以直接繼承或重寫。

? ? 字段:可以是普通字段或靜態字段。

?子類必須實現抽象類中的所有抽象方法,除非子類也是抽象類。 示例

// 抽象類
abstract class Animal {// 抽象方法:沒有方法體,子類必須實現abstract void sound();// 具體方法:有方法體,子類可以直接繼承void sleep() {System.out.println("This animal is sleeping.");}
}// 子類繼承抽象類
class Dog extends Animal {// 實現抽象方法@Overridevoid sound() {System.out.println("Dog barks.");}
}class Cat extends Animal {// 實現抽象方法@Overridevoid sound() {System.out.println("Cat meows.");}
}public class Main {public static void main(String[] args) {// Animal myAnimal = new Animal(); // 錯誤!抽象類不能實例化Dog myDog = new Dog();myDog.sound(); // 輸出:Dog barks.myDog.sleep(); // 輸出:This animal is sleeping.Cat myCat = new Cat();myCat.sound(); // 輸出:Cat meows.myCat.sleep(); // 輸出:This animal is sleeping.}
}

抽象類的使用場景

當多個類有共同的行為,但具體實現不同時,可以使用抽象類。

抽象類適合作為基類,定義通用的方法和字段,子類在此基礎上擴展。

(2).接口(Interface)

特點

接口用 interface 關鍵字定義。

接口中的方法默認是 public abstract 的(即抽象方法),沒有方法體。

接口中的字段默認是 public static final 的(即常量)。

類通過 implements 關鍵字實現接口,必須實現接口中的所有方法。

一個類可以實現多個接口(Java 支持多接口繼承)。

示例:

// 定義接口
interface Drawable {// 抽象方法void draw();
}interface Soundable {// 抽象方法void makeSound();
}// 類實現接口
class Circle implements Drawable {@Overridepublic void draw() {System.out.println("Drawing a circle.");}
}class Dog implements Soundable {@Overridepublic void makeSound() {System.out.println("Dog barks.");}
}// 類實現多個接口
class Cat implements Drawable, Soundable {@Overridepublic void draw() {System.out.println("Drawing a cat.");}@Overridepublic void makeSound() {System.out.println("Cat meows.");}
}public class Main {public static void main(String[] args) {Circle myCircle = new Circle();myCircle.draw(); // 輸出:Drawing a circle.Dog myDog = new Dog();myDog.makeSound(); // 輸出:Dog barks.Cat myCat = new Cat();myCat.draw();      // 輸出:Drawing a cat.myCat.makeSound(); // 輸出:Cat meows.}
}

接口的使用場景

當需要定義一組行為規范,而不關心具體實現時,可以使用接口。

接口適合實現多繼承(一個類可以實現多個接口)。

抽象類 vs 接口
特性抽象類(Abstract Class)接口(Interface)
??? ?
關鍵字?? ?

?
abstract?? ?interface
實例化??不能直接實例化?不能直接實例化
方法可以包含抽象方法和具體方法只能包含抽象方法(Java 8 后可以有默認方法)
字段?? ?可以包含普通字段和靜態字段???只能包含常量(public static final)
繼承???單繼承(一個類只能繼承一個抽象類)?? ?多繼承(一個類可以實現多個接口)
設計目的提供通用的基類,定義部分實現?? ??定義行為規范,不關心具體實現

默認方法和靜態方法(Java 8 新增)
從 Java 8 開始,接口可以包含 默認方法(Default Method) 和 靜態方法(Static Method)。

默認方法
? ? 用 default 關鍵字修飾。

? ? 提供默認實現,子類可以選擇重寫或直接使用。

靜態方法
? ? 用 static 關鍵字修飾。

? ? 可以直接通過接口名調用。

示例:

interface Vehicle {// 抽象方法void start();// 默認方法default void stop() {System.out.println("Vehicle stopped.");}// 靜態方法static void honk() {System.out.println("Honk honk!");}
}class Car implements Vehicle {@Overridepublic void start() {System.out.println("Car started.");}
}public class Main {public static void main(String[] args) {Car myCar = new Car();myCar.start(); // 輸出:Car started.myCar.stop();  // 輸出:Vehicle stopped.Vehicle.honk(); // 輸出:Honk honk!}
}

總結

抽象類:適合定義通用的基類,包含部分實現。

接口:適合定義行為規范,支持多繼承。

抽象類和接口的選擇:

如果需要定義通用的字段和方法,使用抽象類。

如果需要定義行為規范,或者需要多繼承,使用接口。

6. 關聯、聚合和組合

這些是類之間的關系,用于描述對象之間的交互方式。

關聯(Association):表示兩個類之間的簡單關系,可以是單向或雙向的。

聚合(Aggregation):表示“整體-部分”關系,部分可以獨立于整體存在。

組合(Composition):表示更強的“整體-部分”關系,部分不能獨立于整體存在。

// 關聯
class Teacher {String name;Teacher(String name) {this.name = name;}
}class Student {String name;Teacher teacher;Student(String name, Teacher teacher) {this.name = name;this.teacher = teacher;}
}// 聚合
class Department {String name;List<Teacher> teachers;Department(String name, List<Teacher> teachers) {this.name = name;this.teachers = teachers;}
}// 組合
class Car {Engine engine;Car() {engine = new Engine();}
}class Engine {void start() {System.out.println("Engine starts");}
}

?總結

Java 的面向對象編程通過類、對象、封裝、繼承、多態、抽象等特性,提供了強大的工具來構建復雜、可維護的軟件系統。理解這些概念并熟練運用它們是掌握 Java 編程的關鍵。

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

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

相關文章

React(二)——Admin主頁/Orders頁面/Category頁面

文章目錄 項目地址一、側邊欄1.1 具體實現 二、Header2.1 實現 三、Orders頁面3.1 分頁和搜索3.2 點擊箭頭顯示商家所有訂單3.3 頁碼按鈕以及分頁 四、Category頁面4.1 左側商品添加欄目4.2 右側商品上傳欄 五、Sellers頁面六、Payment Request 頁面&#xff08;百萬數據加載&a…

maven 下載依賴 jhash:2.1.2 和對應 jar 包

原文地址 前言 25年新的一年&#xff0c;那就先更新一篇技術文章吧&#xff0c;這個是這幾天剛遇到的一個有意思的bug&#xff0c;記錄分享一下 原因分析 在使用maven加載一個項目的時&#xff0c;發現maven的依賴一直無法解析&#xff0c;更換阿里云鏡像和中央倉庫都沒辦法…

谷歌開放語音命令數據集,助力初學者踏入音頻識別領域

在人工智能的浪潮中&#xff0c;語音識別技術正逐漸成為我們日常生活的一部分。從智能助手到語音控制設備&#xff0c;語音識別的應用場景越來越廣泛。然而&#xff0c;對于初學者來說&#xff0c;進入這一領域往往面臨諸多挑戰&#xff0c;尤其是缺乏合適的開源數據集和簡單的…

nums[:]數組切片

問題&#xff1a;給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 使用代碼如下沒有辦法通過測試示例&#xff0c;必須將最后一行代碼改成 nums[:]nums[-k:]nums[:-k]切片形式&#xff1a; 原因&#xff1a;列表的切片操作 …

python-leetcode-三數之和

15. 三數之和 - 力扣&#xff08;LeetCode&#xff09; class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n len(nums)res []for i in range(n):# 剪枝&#xff1a;如果當前數 > 0&#xff0c;三數之和不可能為 0if nums[i]…

字節小米等后端崗位C++面試題

C 基礎 引用和指針之間的區別&#xff1f;堆棧和堆中的內存分配有何區別&#xff1f;存在哪些類型的智能指針&#xff1f;unique_ptr 是如何實現的&#xff1f;我們如何強制在 unique_ptr 中僅存在一個對象所有者&#xff1f;shared_ptr 如何工作&#xff1f;對象之間如何同步…

極狐GitLab 正式發布安全版本17.7.1、17.6.3、17.5.5

本分分享極狐GitLab 補丁版本 17.7.1, 17.6.3, 17.5.5 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼&#xff0c;我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS&#xff0c;技術團隊已經進行了升級&#xff0c;無需用戶采取任何…

探索綠色能源系統的固態繼電器:2025年展望

隨著全球向綠色能源轉型的加速&#xff0c;對高效、可靠和環保元件的需求從未如此強烈。在這種背景下&#xff0c;國產固態繼電器(SSR)在實現太陽能逆變器、風力渦輪機和儲能系統等關鍵技術方面發揮著關鍵作用。本文探討了綠色能源系統背景下中國固態繼電器行業的前景&#xff…

Rust語言使用iced實現簡單GUI頁面

使用cargo新建一個rust項目 cargo new gui_demo cd gui_demo 編輯Cargo.toml文件 ,添加iced依賴 [package] name "gui_demo" version "0.1.0" edition "2021"[dependencies] iced "0.4.2" 編輯src/main.rs文件&#xff1a; u…

Github提交Pull Request教程 Git基礎掃盲(零基礎易懂)

1 PR是什么&#xff1f; PR&#xff0c;全稱Pull Request&#xff08;拉取請求&#xff09;&#xff0c;是一種非常重要的協作機制&#xff0c;它是 Git 和 GitHub 等代碼托管平臺中常見的功能&#xff0c;被廣泛用于參與社區貢獻&#xff0c;從而促進項目的發展。 PR的整個過…

MySQL 中刪除重復數據 SQL 寫法

要在 MySQL 中刪除重復的數據并只保留一條&#xff0c;可以使用下面的方法&#xff08;要用的時候直接復制小改下條件和表名稱即即可&#xff09; 方法一&#xff1a;使用 left join 子查詢刪除重復數據(推薦) 溫馨提示&#xff1a;本人在 500w 數據下執行此 SQL 耗費 15s-30s…

RabbitMQ 可觀測性最佳實踐

RabbitMQ 簡介 RabbitMQ 是一個開源的消息代理和隊列服務器&#xff0c;用 Erlang 語言編寫&#xff0c;支持多種客戶端。它通過使用交換機&#xff08;Exchanges&#xff09;、隊列&#xff08;Queues&#xff09;和綁定&#xff08;Bindings&#xff09;來路由消息&#xff…

美攝科技PC端視頻編輯解決方案,為企業打造專屬的高效創作平臺

在當今這個信息爆炸的時代&#xff0c;視頻已成為不可或缺的重要內容形式&#xff0c;美攝科技推出了PC端視頻編輯解決方案的私有化部署服務&#xff0c;旨在為企業提供一款量身定制的高效創作平臺。 一、全面功能&#xff0c;滿足企業多樣化需求 美攝科技的PC端視頻編輯解決…

【Oracle篇】深入了解執行計劃中的訪問路徑(含表級別、B樹索引、位圖索引、簇表四大類訪問路徑)

&#x1f4ab;《博主介紹》&#xff1a;?又是一天沒白過&#xff0c;我是奈斯&#xff0c;從事IT領域? &#x1f4ab;《擅長領域》&#xff1a;??擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、NoSQL(…

騰訊云AI代碼助手編程挑戰賽-廚房助手之AI大廚

騰訊云AI代碼助手編程挑戰賽-廚房助手之AI大廚 作品簡介 身處當今如火箭般迅猛發展的互聯網時代&#xff0c;智能聊天助手已然化身成為提升用戶體驗的關鍵利器&#xff0c;全方位滲透至人們的數字生活。 緊緊跟隨著這股洶涌澎湃的時代浪潮&#xff0c;我毅然投身于極具挑戰性…

vscode 無法使用npm, cmd命令行窗口可以正常執行

解決方法&#xff1a; 執行命令獲得命令的位置 get-command npm 得到如下 然后刪除或者修改 npm.ps1文件 讓其不能使用就行。然后重啟vscode即可。 pnpm 同理即可 另外加速源 國內鏡像源&#xff08;淘寶&#xff09;&#xff1a; npm config set registry https://regist…

簡易CPU設計入門:算術邏輯單元(四)

項目代碼下載 請大家首先準備好本項目所用的源代碼。如果已經下載了&#xff0c;那就不用重復下載了。如果還沒有下載&#xff0c;那么&#xff0c;請大家點擊下方鏈接&#xff0c;來了解下載本項目的CPU源代碼的方法。 CSDN文章&#xff1a;下載本項目代碼 上述鏈接為本項目…

Spring Boot 和微服務:快速入門指南

&#x1f496; 歡迎來到我的博客&#xff01; 非常高興能在這里與您相遇。在這里&#xff0c;您不僅能獲得有趣的技術分享&#xff0c;還能感受到輕松愉快的氛圍。無論您是編程新手&#xff0c;還是資深開發者&#xff0c;都能在這里找到屬于您的知識寶藏&#xff0c;學習和成長…

VSCode 使用鼠標滾輪控制字體

一、 文件 | 首選項 | 設置 二、單擊在 settings.json中編輯 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、測試 按住ctrl鼠標滾輪&#xff0c;控制字體大小

tip:vue中路由跳轉,返回是還想保留原來的搜索條件

新寫的一個項目&#xff0c;使用后發現&#xff0c;點“詳細”跳轉到詳情頁面。返回時&#xff0c;原來的篩條件沒了&#xff0c;又把全部的數據都查詢出來&#xff0c;還需要重新篩選一下&#xff0c;使用起來很不友好。 解決辦法&#xff1a;瀏覽器本地存儲&#xff08;Local…