java_oop(面向?qū)ο?

基本概念

Java 面向?qū)ο缶幊?(Object-Oriented Programming, OOP) 是一種編程范式宋渔,旨在通過(guò)對(duì)象的概念來(lái)組織程序的設(shè)計(jì)和開發(fā)狼纬。OOP 是 Java 語(yǔ)言的核心特點(diǎn)诞仓,它幫助開發(fā)者更好地管理和組織代碼洒沦,使代碼更易于理解幕与、維護(hù)和重用挑势。

面向?qū)ο笏拇蠡咎匦?/h1>

一. 封裝

  • 封裝是將對(duì)象的屬性和方法包裝在一起,并隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)啦鸣。

  • 通過(guò)訪問(wèn)修飾符(如 private潮饱、protected、public)诫给,可以控制對(duì)類成員的訪問(wèn)級(jí)別

  • 例如香拉,使用 private 關(guān)鍵字將 name 和 age 屬性設(shè)為私有,并通過(guò)公共方法(如 getName() 和 setName())訪問(wèn)它們

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

二.繼承

  • 繼承允許一個(gè)類從另一個(gè)類繼承屬性和方法中狂,促進(jìn)代碼的重用和層次化設(shè)計(jì)凫碌。
  • 子類可以繼承父類的特性,并且可以添加新的特性或重寫父類的特性胃榕。
  • java中實(shí)現(xiàn)單繼承盛险,而無(wú)法實(shí)現(xiàn)多繼承(只能有一個(gè)父親)但是可以實(shí)現(xiàn)多重繼承(爺爺,父親勋又,兒子)
public class Animal {
    private String name;
    private int age;
}
public class Dog extends Animal {
   public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("小黑");
        dog.setAge(22);
        System.out.println(dog);
    }
}

三. 多態(tài)

  • 多態(tài)允許對(duì)象在不同情境下以不同的形式表現(xiàn)苦掘。Java 支持方法重載(Overloading)和方法重寫(Overriding),這是多態(tài)的兩種實(shí)現(xiàn)方式楔壤。
  • 例如鹤啡,可以重寫父類的方法,使得子類具有不同的行為蹲嚣。
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建 Dog 對(duì)象并賦給 Animal 類型的變量
        Animal animal1 = new Dog();
        // 多態(tài)性递瑰,調(diào)用的是 Dog 類的 makeSound() 方法
        animal1.makeSound();  // 輸出: 汪汪!

        // 創(chuàng)建 Cat 對(duì)象并賦給 Animal 類型的變量
        Animal animal2 = new Cat();
        // 多態(tài)性祟牲,調(diào)用的是 Cat 類的 makeSound() 方法
        animal2.makeSound();  // 輸出: 喵喵!
    }
}

四. 抽象

  • 抽象是指通過(guò)抽象類或接口,定義對(duì)象的抽象特性泣矛,而不具體實(shí)現(xiàn)細(xì)節(jié)疲眷。
  • 抽象類不能實(shí)例化,它們通常用來(lái)定義通用的行為您朽,由具體的子類實(shí)現(xiàn)這些行為。
// 抽象類
abstract class Animal {
    // 抽象方法换淆,沒(méi)有實(shí)現(xiàn)
    abstract void makeSound();
}

// Dog 類哗总,繼承自 Animal
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("汪汪! 汪汪!");
    }
}

// Cat 類,繼承自 Animal
class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("喵! 喵!");
    }
}

接口

  • 接口使得設(shè)計(jì)更加靈活倍试,允許類實(shí)現(xiàn)多個(gè)接口讯屈,從而在不使用多重繼承的情況下實(shí)現(xiàn)多種行為。
  • 接口通過(guò)將方法的定義與實(shí)現(xiàn)分離县习,可以讓接口的使用者只關(guān)心接口定義的功能涮母,而不關(guān)心具體實(shí)現(xiàn)。這種設(shè)計(jì)減少了類之間的耦合度躁愿,增加了代碼的可維護(hù)性叛本。
  • 接口定義了一組規(guī)范,強(qiáng)制實(shí)現(xiàn)類必須提供某些方法的實(shí)現(xiàn)彤钟。這種規(guī)范性可以提高代碼的一致性和可讀性来候。
  • 接口可以很容易地被替換為不同的實(shí)現(xiàn),這在編寫測(cè)試代碼時(shí)尤為重要逸雹∮粒可以使用模擬(mock)實(shí)現(xiàn)來(lái)測(cè)試代碼,而不依賴具體的類實(shí)現(xiàn)梆砸。
  • 例子:實(shí)現(xiàn)一個(gè)簡(jiǎn)單的接口案例
  1. 定義接口
// 接口定義
interface Flyable {
    void fly();
}
  1. 實(shí)現(xiàn)接口的類
// Bird 類實(shí)現(xiàn)了 Flyable 接口
class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鳥在飛翔");
    }
}

// Dog 類沒(méi)有實(shí)現(xiàn) Flyable 接口
class Dog {
    void bark() {
        System.out.println("狗在叫");
    }
}
  1. 使用接口的多態(tài)性
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建 Bird 對(duì)象转质,并將其賦值給 Flyable 類型的變量
        Flyable flyableBird = new Bird();
        // 調(diào)用 fly() 方法,實(shí)際調(diào)用的是 Bird 的實(shí)現(xiàn)
        flyableBird.fly();  // 輸出: 鳥在飛翔

        // 創(chuàng)建 Dog 對(duì)象
        Dog dog = new Dog();
        dog.bark();  // 輸出: 狗在叫

        // 注意:不能將 Dog 對(duì)象賦值給 Flyable帖世,因?yàn)?Dog 沒(méi)有實(shí)現(xiàn) Flyable 接口
        // Flyable flyableDog = new Dog();  // 這行代碼會(huì)編譯錯(cuò)誤
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末休蟹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狮暑,更是在濱河造成了極大的恐慌鸡挠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搬男,死亡現(xiàn)場(chǎng)離奇詭異拣展,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缔逛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門备埃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)姓惑,“玉大人,你說(shuō)我怎么就攤上這事按脚∮诒校” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵辅搬,是天一觀的道長(zhǎng)唯沮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)堪遂,這世上最難降的妖魔是什么介蛉? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮溶褪,結(jié)果婚禮上币旧,老公的妹妹穿的比我還像新娘。我一直安慰自己猿妈,他們只是感情好吹菱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彭则,像睡著了一般鳍刷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贰剥,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天倾剿,我揣著相機(jī)與錄音,去河邊找鬼蚌成。 笑死前痘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的担忧。 我是一名探鬼主播芹缔,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓶盛!你這毒婦竟也來(lái)了最欠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惩猫,失蹤者是張志新(化名)和其女友劉穎芝硬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轧房,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拌阴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奶镶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迟赃。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陪拘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纤壁,到底是詐尸還是另有隱情左刽,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布酌媒,位于F島的核電站欠痴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馍佑。R本人自食惡果不足惜斋否,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拭荤。 院中可真熱鬧,春花似錦疫诽、人聲如沸舅世。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雏亚。三九已至,卻和暖如春摩钙,著一層夾襖步出監(jiān)牢的瞬間罢低,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胖笛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留网持,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓长踊,卻偏偏與公主長(zhǎng)得像功舀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子身弊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容