java_oop(面向?qū)ο?

基本概念

Java 面向?qū)ο缶幊?(Object-Oriented Programming, OOP) 是一種編程范式,旨在通過對象的概念來組織程序的設(shè)計和開發(fā)。OOP 是 Java 語言的核心特點,它幫助開發(fā)者更好地管理和組織代碼,使代碼更易于理解、維護(hù)和重用。

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

一. 封裝

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

  • 通過訪問修飾符(如 private、protected、public),可以控制對類成員的訪問級別

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

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

    public String getName() {
        return name;
    }

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

二.繼承

  • 繼承允許一個類從另一個類繼承屬性和方法,促進(jìn)代碼的重用和層次化設(shè)計。
  • 子類可以繼承父類的特性,并且可以添加新的特性或重寫父類的特性。
  • java中實現(xiàn)單繼承,而無法實現(xiàn)多繼承(只能有一個父親)但是可以實現(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)允許對象在不同情境下以不同的形式表現(xiàn)。Java 支持方法重載(Overloading)和方法重寫(Overriding),這是多態(tài)的兩種實現(xiàn)方式。
  • 例如,可以重寫父類的方法,使得子類具有不同的行為。
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建 Dog 對象并賦給 Animal 類型的變量
        Animal animal1 = new Dog();
        // 多態(tài)性,調(diào)用的是 Dog 類的 makeSound() 方法
        animal1.makeSound();  // 輸出: 汪汪!

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

四. 抽象

  • 抽象是指通過抽象類或接口,定義對象的抽象特性,而不具體實現(xiàn)細(xì)節(jié)。
  • 抽象類不能實例化,它們通常用來定義通用的行為,由具體的子類實現(xiàn)這些行為。
// 抽象類
abstract class Animal {
    // 抽象方法,沒有實現(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è)計更加靈活,允許類實現(xiàn)多個接口,從而在不使用多重繼承的情況下實現(xiàn)多種行為。
  • 接口通過將方法的定義與實現(xiàn)分離,可以讓接口的使用者只關(guān)心接口定義的功能,而不關(guān)心具體實現(xiàn)。這種設(shè)計減少了類之間的耦合度,增加了代碼的可維護(hù)性。
  • 接口定義了一組規(guī)范,強(qiáng)制實現(xiàn)類必須提供某些方法的實現(xiàn)。這種規(guī)范性可以提高代碼的一致性和可讀性。
  • 接口可以很容易地被替換為不同的實現(xiàn),這在編寫測試代碼時尤為重要。可以使用模擬(mock)實現(xiàn)來測試代碼,而不依賴具體的類實現(xiàn)。
  • 例子:實現(xiàn)一個簡單的接口案例
  1. 定義接口
// 接口定義
interface Flyable {
    void fly();
}
  1. 實現(xiàn)接口的類
// Bird 類實現(xiàn)了 Flyable 接口
class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鳥在飛翔");
    }
}

// Dog 類沒有實現(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 對象,并將其賦值給 Flyable 類型的變量
        Flyable flyableBird = new Bird();
        // 調(diào)用 fly() 方法,實際調(diào)用的是 Bird 的實現(xiàn)
        flyableBird.fly();  // 輸出: 鳥在飛翔

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

        // 注意:不能將 Dog 對象賦值給 Flyable,因為 Dog 沒有實現(xiàn) Flyable 接口
        // Flyable flyableDog = new Dog();  // 這行代碼會編譯錯誤
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容