1. 程式人生 > 實用技巧 >面向物件(類與物件)

面向物件(類與物件)

Java語言是一種面向的程式設計語言,而面向物件思想是一種程式設計思想。我們參照面向物件思想使用java語言去設計,開發計算機程式。

除去面向物件之外還有一個面向過程。

區別:

  • 面向過程:當要實現一個功能的時候,面向過程,要處理好每一個節點,直至整個過程結束,然後得到結果。
  • 面向物件:當要實現一個功能的時候,直接去呼叫一個關於這個功能相關的類,把過程交給其他類來處裡,自己等著獲取結果
  • 面向過程強調這功能的步驟,面向物件強調這功能的結果。

舉例:

  • 面向過程:把衣服脫下來-->找一個盆-->放點洗衣粉-->加點水-->浸泡10分鐘-->揉一揉-->清洗衣服-->擰乾-->晾起來

  • 面向物件:把衣服脫下來-->開啟全自動洗衣機-->扔衣服-->按鈕-->晾起來

特點:

面向物件思想是一種更符合我們思考習慣的思想,它可以將複雜的事情簡單化,並將我們從執行者變成了指揮者。面向物件的語言中,包含了三大基本特徵,即封裝、繼承和多型。

什麼是類:

類是對一種具有類似的屬性和行為的事物的集合。eg:學生類,教師類等等。學生有相同的屬性:學生證號,姓名等等,有相同的行為:做作業,寫卷子等等。

現實中:

  • 屬性:就是該事物的狀態資訊。
  • 行為:就是該事物能夠做什麼。

什麼是物件:

是一類事物的具體體現。物件是類的一個例項,必然具備該類事物的屬性和行為。比如學生類中的張三是一個學生,那麼張三就是一個物件,他具有學生證號,姓名等屬性

,也具有做作業,寫卷子等行為

類與物件的關係:

  • 類是對一組事物的統稱描述,類似抽象的,它看不見摸不著 eg:比如手機類是手機的統稱,它有一系列的屬性比如顏色,配件等等,行為是
  • 物件是一組事物的例項,是具體的,是真正存在的可以看得見摸得著 eg: 你買的一個小米9手機是一個實實在在的東西,就屬於一個物件

類的定義:

訪問許可權修飾符 class 類名 {
//成員變數
//成員方法
}

物件的定義:類名 物件名 = new 類名();

類與物件的練習:

public class OverloadDome03 {
    // 定義一個求和 工具類
    
    /* 定義sum方法兩個sum(int,int) 並返回值
*/ public int sum(int a,int b) { return a+b; } /* 定義sum方法兩個sum(int,int,int) 並返回值*/ public int sum(int a,int b,int c) { return a+b+c; } /* 定義sum方法兩個sum(double,double) 並返回值*/ public double sum(double a,double b) { return a+b; } /* 定義sum方法兩個sum(int,double) */ public void sum(int a,double b) { System.out.println(a+b); } } public class OverloadDome03Test { /* 求和測試類 */ public static void main(String[] args) { OverloadDome03 ov03 = new OverloadDome03();//例項化OverloadDome03 double sum = ov03.sum(0.0, 1.293); //呼叫sum(double,double)f方法 並列印 System.out.println(sum); int sum1 = ov03.sum(1,2); //呼叫sum(int,int)f方法 並列印 System.out.println(sum1); ov03.sum(12,19.22); //呼叫sum(int,double); int sum2 = ov03.sum(1,2,3); //呼叫sum(int,int,int)f方法 並列印 System.out.println(sum2); } }

方法定義:

語法:

訪問許可權修飾符 靜態修飾符 返回值型別 方法名(引數型別 引數名,引數型別 引數名...){
執行程式碼...
return 返回語句;

成員變數和區域性變數:

在之前的個工作中,我們學習了怎麼去定義變數,變數又分為成員變數(又叫全域性變數)和區域性變數。下面直接說區別吧。

  1. 位置不同:全域性變數定義在類之內,方法之外;區域性變數定義在方法之內。
  2. 作用域不同:全域性變數作用於整個類中;區域性變數作用於單個方法之中。
  3. 初始化不同:全域性變數可以不用初始化賦值就可以使用;區域性變數若要使用必須先初始化然後才能使用。
  4. 記憶體位置不同:全域性變數儲存在堆記憶體,區域性變數儲存在棧記憶體。
  5. 生命週期不同:全域性變數隨物件的建立而存在,隨物件的銷燬而消失。區域性變數隨方法的呼叫而建立,方法結束而消失。

下面簡單的定義一下:

public class VariableDome01 {
    int j; // 定義一個全域性變數j

    public void test1() {
        int i = 1;      //定義一個區域性變數i並賦值i 
        System.out.println(j+i);   //假若i沒有賦值將無法使用
    }
}

//測試
public class VariableDome01Test {
    public static void main(String[] args) {
      VariableDome01 variableDome01 = new VariableDome01();
      variableDome01.j=1;   //測試中可以直接給j賦值卻不能為i賦值因為i只作用於VariableDome01中test1方法中
      variableDome01.test1();  //呼叫後列印為2
    }
}

方法過載:

概念:指在同一個類中,允許存在一個以上的同名方法,只要它們的引數列表不同即可,與修飾符和返回值型別無關。

  • 多個方法在同一個類中
  • 多個方法具有相同的方法名
  • 多個方法的引數不相同,型別不同或者數量不同
  • 引數列表:個數不同,資料型別不同,順序不同。

如下有幾個方法,可以看看過載方法有幾個:

public static void method(){}
public static void method(int a){}
static void method(int a,int b){}
public static void method(double a,int b){}
public static void method(int a,double b){}
public void method(int i,double d){}
public void method(){}
public static void method(int i,int j){} 

我簡略的分析一波=-=我比較菜

個人學習,內容簡略。