1. 程式人生 > 其它 >python:從入門到放棄 11 函式遞迴

python:從入門到放棄 11 函式遞迴

 

 

我的部落格

封裝

何為封裝

將抽象性函式介面的實現細節部分包裝、隱藏起來的方法

封裝可以被認為是一個保護屏障,防止該類的程式碼和資料被外部類定義的程式碼隨機訪問。

要訪問該類的程式碼和資料,必須通過嚴格介面控制。

封裝最主要的功能在於我們能修改自己的實現程式碼,而不用修改那些呼叫我們程式碼的程式片段。

適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性

如何封裝

首先,我們需要修改屬性的可見性來限制對屬性的訪問,一般用private關鍵詞進行限制。

像這樣我就封裝了兩個欄位,封裝之後我們不能在其他類中自由呼叫,因為它不是公開的屬性!

但是我們如何讓他可以修改,並且還保持安全性呢?

我們可以對他進行重構,封裝成方法,在IDEA中,提供了快捷的右鍵,可以快速生成。

執行一鍵封裝後效果如下。

public class Demo {

   private String i;
   private int x;
   public static void main(String[] args) {

  }

   public String getI() {
       return i;
  }

   public void setI(String i) {
       this.i = i;
  }

   public int getX() {
       return x;
  }

   public void setX(int x) {
       this.x = x;
  }
}

大家可能注意到了,封裝的方法是public修飾的,所以public方法是外部類訪問該類成員變數的入口,這些方法被稱為getter和setter方法。

繼承

何為繼承

第二大特徵——繼承!

何為繼承?字面上理解,子承父業,即為繼承。

那其實Java也是一樣,一個(多個)類繼承另一個類的特徵,我們稱之為繼承。

如何繼承

我們上面就說過,繼承要子承父業,那如何定義父親與兒子呢?

我們的extends關鍵詞可為類指定它的父親。

在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。

/**
* 父類
*/
public class Demo {
   
}

/**
* 子類
*/
class son extends Demo{

}

這段程式碼是單繼承,只有一個子一個父,而我們的Java是沒有多繼承的,但是有個關鍵詞可以變相的定義多繼承——implements

這裡就不細說了。

繼承到底有什麼用呢?

看這裡,son類是子類,它裡面並沒有輸出語句,但是他卻輸出了父類裡面的語句。

相當於它繼承了父親的財產。而假設我們將多個類的共同的放在父類裡面,我們是不是可以節省很多程式碼呢?

 

那麼問題來了,我如果想讓父類中的一個屬性或者方法啥的不被繼承怎麼辦?

我們可以使用final來定義不想被繼承的方法或者屬性,如下程式碼塊一樣。

/**
* @author woo-m
*/

/**
* 父類
*/
public class Demo {
   final static void main(String[] args) {
       System.out.println("父類");
  }
}

/**
* 子類
*/
class son extends Demo{

}

 

同名情況下,如何選擇父類與子類

/**
* 定義動物類
*/
class Animal {
   void show() {
       System.out.println("動物");
  }
}

/**
* 狗類定義動物類為父類
*/
class Dog extends Animal {
   @Override
   void show() {
       System.out.println("狗");
  }
   void showTest() {
       this.show();   // this 呼叫自己的方法

       super.show();  // super 呼叫父類方法
  }
}

/**
* @author woo-m
*/

public class Demo {
   public static void main(String[] args) {
       Animal a = new Animal();
       a.show();

       Dog d = new Dog();
       d.showTest();
  }
}

這裡,你可以看到,我這裡使用this來指向自己類中定義的show方法,而super可以指向父類的show方法。

這裡就不多講,自己理解!

多型

何為多型

欲解其用,必知其理。

我們先來看看,啥是多型!

  • 現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。

  • Java作為面向物件的語言,同樣可以描述一個事物的多種形態。如Student類繼承了Person類,一個Student的物件便既是Student,又是Person。

也就是說,你有許許多多的特點,你的特點可以分為多個類,你可以是人,可以是學生,同時你也是程式設計師。

多型體現為父類引用變數可以指向子類物件,不過,前提條件:必須有子父類關係。

多型優勢

  • 消除型別之間的耦合關係

  • 可替換性

  • 可擴充性

  • 介面性

  • 靈活性

  • 簡化性

多型存在的三個必要條件

  • 繼承

  • 重寫

  • 父類引用指向子類物件:Parent p = new Child();

使用多型

多型這裡難以文字描述,需要自己悟出來,我就不寫了。