1. 程式人生 > 其它 >Java基礎之面向物件詳解

Java基礎之面向物件詳解

技術標籤:# Java基礎java面向物件程式設計

目錄

什麼是類?

什麼是物件?

面向物件的三大特性(封裝、繼承、多型)

一、封裝

訪問修飾符

關鍵字this的含義

二、繼承

繼承後的特點--成員變數

繼承後的特點--成員方法

super和this的含義

父類空間由於子類物件產生

三、多型

多型存在的條件:

創作不易,如果本篇部落格對您有一定的幫助,大家記得留言+點贊哦。


Java語言來說,一切皆是物件。把現實世界中的物件抽象地體現在程式設計世界中,一個物件代表了某個具體的操作。一個個物件最終組成了完整的程式設計,這些物件可以是獨立存在的,也可以是從別的物件繼承過來的。物件之間通過相互作用傳遞資訊,實現程式開發。

什麼是類?

是物件的抽象,它用於描述一組物件的共同特徵和行為。類中可以定義成員變數和成員方法,其中成員變數用於描述物件的特徵,也被稱之為屬性,成員方法用於描述物件的行為,簡稱為方法。

public class Student {
    //成員變數
    private String name;//姓名
    private int age;//年齡

    //成員方法
    //學習的方法
    public  void study(){
        System.out.println("好好學習,天天向上");
    }
    //吃飯的方法
    public void eat(){
        System.out.println("乾飯人乾飯時間");
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //封裝私有變數
    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;
    }
    
    //帶參建構函式
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //無參建構函式
    public Student() {
    }

什麼是物件?

物件 :是一類事物的具體體現。物件是類的一個 例項 (物件並不是找個女朋友),必然具備該類事物的屬性和行為。
public static void main(String[] args) {
     //建立物件
     Student stu1=new Student("張三",9);
     Student stu2=new Student("李四",9);
     //使用物件訪問類中的成員
     stu1.setAge(18);
     stu1.eat();
     stu2.setName("趙四");
     stu2.study();

}

面向物件的三大特性(封裝、繼承、多型)

一、封裝

封裝:封裝是面向物件方法的一個重要原則,它有兩個含義:第一個含義是,把物件的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即物件);第二個含義也稱作資訊隱蔽,即儘可能隱蔽物件的內部細節,對外形成一個邊界,只保留有限的對外介面使之與外部發生聯絡。

1.使用private關鍵字來修飾成員變數

2.對需要訪問的成員變數,提供對應的一對getXxx方法、SetXxx方法。

  public class Student {
    //私有成員變數
    private String name;//姓名
    private int age;//年齡
    //提供供外界訪問的公有方法
    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;
    }
}

訪問修飾符

關鍵字this的含義

  • this代表所在類的當前物件的引用(地址值),即物件自己的引用。
  • 方法被哪個物件呼叫,方法中的this就代表哪個物件。即誰在呼叫,this就代表誰。

變數封裝了當前值,方法封裝了程式碼和行為,類封裝兩者以同時提供一堆狀態和函式。介面封裝了方法。

二、繼承

繼承:繼承是一種使使用者得以在一個類的基礎上建立新的類的技術。新的類自動繼承舊類的屬性和行為特徵,並可具備某些附加的特徵或某些限制。

繼承就是子類繼承父類的屬性和行為,使得子類具有與父類相同的屬性、相同的行為。子類可以直接訪問父類的非私有的屬性和行為。

提高了程式碼的複用性。類與類之間產生了關係,是多型的前提

class 父類{
    ···
}

class 子類 extends 父類{
    ···
}

繼承後的特點--成員變數

如果子類父類出現不同名的成員變數,程式碼的訪問沒有影響。

如果子類父類出現了同名的成員變數,在子類中需要訪問父類中非私有成員變數是,需要使用super關鍵字,修飾父類的成員變數

class Zi extends Fu {
    // Zi中的成員變數
    int num = 6; 
    public void show() { 
        //訪問父類中的num 
        System.out.println("Fu num=" + super.num); 
        //訪問子類中的num 
        System.out.println("Zi num=" + this.num); 
    } 
}

繼承後的特點--成員方法

如果子類父類出現不同名的成員方法,程式碼的訪問沒有影響。

如果子類父類出現了同名的成員方法,這時出現了方法重寫(Override)

方法重寫:子類中出現與父類一模一樣的方法是(返回值型別、方法名和引數列表都相同),會出現覆蓋效果。宣告不變,重新實現。

//父類
class Fu { 
    public void show() {
        System.out.println("Fu show"); 
    } 
}
//子類
class Zi extends Fu { 
    //子類重寫了父類的show方法 
    public void show() { 
        System.out.println("Zi show"); 
    } 
}
//測試類ExtendsDemo
public class ExtendsDemo{ 
    public static void main(String[] args) { 
        Zi z = new Zi(); 
        // 子類中有show方法,只執行重寫後的show方法 
        z.show(); // Zi show 
    } 
}

super和this的含義

  • super:代表父類的儲存空間標識,只能出現在方法中(可以理解父類的引用)
  • this:代表當前物件的引用(誰呼叫就代表誰)。

父類空間由於子類物件產生

在每次建立子類物件時,先初始化父類空間,再建立子類物件本身。目的在於子類物件中包含了其對應的父類空間,便可以包含其父類的成員,如果父類成員非private修飾,子類可以隨意使用父類成員。程式碼體現在子類的構造方法呼叫時,一定先呼叫父類的構造方法。

三、多型

多型:在收到訊息時物件要予以響應,不同的物件收到同一訊息可以產生完全不同的結果, 這一現象叫做多型。

多型存在的條件:

  • 1.存在繼承關係
  • 2.方法需要重寫
  • 3.父類的引用指向子類
//子類的引用  指向——>    子類
父類型別  變數名 = new 子類物件;
變數名.方法名();

父類型別:指子類物件繼承父類型別,或者實現的父介面型別。 多型是方法的多型,屬性沒有多型。

//抽象的父類
public abstract class Animal { 
    public abstract void eat();
}
//子類Cat
class Cat extends Animal { 
    public void eat() { 
        System.out.println("吃魚"); 
    } 
}
//子類Dog
class Dog extends Animal {
    public void eat() {
        System.out.println("吃骨頭"); 
    } 
}
//測試類Test
public class Test { 
    public static void main(String[] args) {
        // 多型形式,建立物件 
        Animal a1 = new Cat(); 
        // 呼叫的是 Cat 的 eat 
        a1.eat(); 
        // 多型形式,建立物件 
        Animal a2 = new Dog(); 
        // 呼叫的是 Dog 的 eat 
        a2.eat(); 
    }
}

在多型的程式碼中,成員方法的訪問規則是: 看new的是誰,就優先用誰,沒有則向上找。

創作不易,如果本篇部落格對您有一定的幫助,大家記得留言+點贊哦。