【2022.06.06】huginn對動態網頁進行爬取
-
面向過程思想
-
步驟清晰簡單,第一步做什麼,第二步做什麼...
-
面向過程適合處理一些較為簡單的問題
-
-
面向物件思想
-
物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然後對這些分類進行單獨思考。最後,才對某個分類下的細節進行面向過程的思索
-
面向物件適合處理複雜的問題,適合處理需要多人協作的問題
-
-
對於描述複雜的事物,為了從巨集觀上把握、從整體上合理分析,我們需要使用面向物件的思路來分析整個系統。但是,具體到微觀操作,仍然需要面向過程的思路去處理
什麼是面向物件
-
面向物件程式設計(Object-Oriented Programming,OOP)
-
面向物件程式設計的本質就是:以類的方式組織程式碼,以物件的組織(封裝)資料
-
抽象
-
三大特性:
-
封裝
-
繼承
-
多型
-
-
從認識論角度考慮,是先有物件後有類。物件,是具體的事物。類,是抽象的,是對物件的抽象
-
從程式碼執行角度考慮是先有類後有物件。類是物件的模板
類與物件的關係
-
類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物
-
動物、植物、手機、電腦....
-
Person類、Pet類、Car類等,這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為
-
-
物件是抽象概念的具體例項
-
張三就是人的一個具體例項,張三家裡的旺財就是狗的一個具體例項
-
能夠體現出特點,展現出功能的是具體的例項,而不是一個抽象的概念
-
建立與初始化物件
-
使用new關鍵字建立物件
-
使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行預設的初始化以及對類中構造器的呼叫
-
類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的。並且構造器有以下倆個特點:
-
必須和類的名字相同
-
必須沒有返回值,也不能寫void
-
建立物件記憶體分析
程式碼部分
記憶體
封裝
-
該露的露,該藏的藏
-
我們程式設計要追求“高內聚,低耦合”。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用
-
-
封裝(資料的隱藏)
-
通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏
-
-
屬性私有,get/set
繼承
-
繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模
-
extends的意思是“拓展”。子類是父類的拓展
-
Java中類只有單繼承,沒有多繼承
-
繼承是類和類之間的一種關係。除此以外,類和類之間的關係還有依賴、組合、聚合等
-
繼承關係的倆個類,一個為子類(派生類),一個為父類(基類)。子類繼承父類,使用關鍵字extends來表示
-
子類和父類之間,從意義上講應該具有“is a”關係
super
super()注意點:
super()呼叫父類的構造方法,必須在構造方法第一位
必須只能出現在子類的方法或者構造方法中
super()和this()不能同時呼叫構造方法
對比this():
代表的物件不同:
this:代表呼叫者這個物件
super:代表父類物件的呼叫
前提:
this:沒有繼承關係也可以使用
super:只能在繼承條件下才能使用繼承條件
呼叫構造方法的區別:
this:預設呼叫本類的構造
super:呼叫父類的構造
方法重寫
-
需要有繼承關係,子類繼承父類
-
方法名必須相同,引數列表必須相同
-
方法修飾符不能寫靜態(static),因為靜態的在類載入時就載入,不能重寫
-
訪問修飾符範圍只能擴大,不能縮小:Public>Protected>Default>Private
-
即同一方法可以根據傳送物件的不同而採用多種不同的行為方式
-
一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多
-
多型存在的條件
-
有繼承關係
-
子類重寫父類方法
-
父類引用指向子類物件
-
-
注意:多型是方法的多型,屬性沒有多型性
抽象類
-
abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類
-
抽象類中可以沒有抽象方法,但抽象方法的類一定要宣告為抽象類
-
抽象類不能使用new關鍵字來建立物件,它是用來讓子類繼承的
-
抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的
-
子類繼承抽象類,要麼就必須實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類
介面
-
普通類:只有具體實現
-
介面類:具體實現和規範(抽象方法)都有
-
介面:只有規範
-
介面就是規範,定義了一組規則,體現了現實世界中”如果你是...則必須能...“的思想。
-
介面的本質就是契約,就像我們人間的法律一樣。指定好後大家都遵守
-
OO的精髓,是對物件的抽象,最能體現這一點的就是介面。為什麼我們討論設計模式只針對具備了抽象能力的語言(比如C++、Java、C#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象
-
宣告類的關鍵字是class,宣告介面的關鍵字是interface
內部類
內部類就是在一個類的內部再定義一個類,比如,A類定義了一個B類,那麼B類相對於A類來說就稱為內部類,而A類相對於B類來說就是外部類
-
成員內部類
-
靜態內部類
-
區域性內部類
-
匿名內部類
package oop.demo06;
//java內部類
public class Outer {
private int id = 10;
public void out(){
System.out.println("Java內部類");
}
public void method(){
class Inner03{
public void in(){
System.out.println("區域性內部類");
}
}
}
//成員內部類
public class Inner01{
public void in(){
System.out.println("Java外部類");
}
public void getId(){
System.out.println(id);
}
}
public static class Inner02{
public void in(){
System.out.println("靜態內部類");
}
}
}
執行
package oop.demo06;
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();//例項化外部類
Outer.Inner01 inner = outer.new Inner01();//通過外部類例項化內部類
inner.getId();//根據外部類的方法呼叫內部類的屬性
new Outer().method();//new Outer()並沒有用物件名去接,即匿名內部類
}
}