JAVA面寫物件詳解
總結一下Java面向物件的基礎知識與理解
一、面向物件
面向物件是一種新的程式設計方法,其基本思想是使用物件、類、繼承、封裝、多型等基本概念進行的程式設計。
從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,並且在系統構造中儘可能運用人類的自然思維方式。
面向物件程式設計主要區別於面向過程程式設計,在初學程式設計時(如C語言)都是採用面向過程程式設計,從直接解決一個問題的
過程出發,程式設計來實現解決這個問題,面向過程程式設計其實更快速的解決問題,如在演算法競賽中解題基本也都屬於
面向過程。但是面向過程程式設計不適合專案開發,因為它不方便修改、維護、更新等操作。面向物件程式設計恰好解決了
此問題。面向物件開發更適合軟體專案開發,相當於一種新的程式設計規範,方便專案的修改維護等。
二、物件
物件是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個物件由一組屬性和對這組屬性進行
操作的一組服務組成。服務指的是方法實現的這個物件特有的一些功能。
類的例項化可生成物件,一個物件的生命週期包括三個階段:生成、使用、消除。
三、類
類是具有相同屬性和方法的一組物件的集合,它為屬於該類的所有物件提供了統一的抽象描述,其內部包括屬性和方法
兩個主要部分。
類可以由public、abstract、final修飾類。
通常情況下使用public為公共類
abstract修飾類為抽象類。抽象類不能例項化物件,抽象類的作用是可被子類繼承,提供屬性和方法。可宣告為引用,更自然的使用多型。
final修飾類為最終類。不能被繼承,沒有子類,但是final可以繼承其他的類
類的構造方法
構造方法是一個特殊的方法,Java中的每個類都有構造方法,用來初始化該類的一個物件。
構造方法具有和類名相同的名稱,不返回任何資料類
有無參構造方法和帶參構造方法,構造方法可以過載多次
類和物件的關係
類是模型,抽象的概念,確定物件將會擁有的特徵(屬性)和行為(方法)
物件是具體實體,是類的例項表現
先定義類,再通過類例項化物件
類是物件的型別,物件是
四、面向物件的基本特性
繼承
繼承是一種類與類之間的關係,使用已存在的類的定義作為基礎,建立新類。
新類的定義可以增加新的資料或新的功能,也可以用父類的功能。如貓和狗都可繼承動物類
繼承的實現
//編寫父類
class Animal{
//公共的屬性和方法
}
//編寫子類,繼承父類
class Dog extends Animal{
//子類特有的屬性和方法
}
當父類和子類都有A方法時,又希望子類的A方法和父類的A方法不同
這時可採用方法重寫
方法重寫與方法過載
方法重寫
1、有繼承關係的子類中
2、方法名相同,引數列表相同(引數順序、個數、型別)
3、訪問修飾符,訪問範圍需要大於等於父類的訪問範圍
方法過載
1、同一個類中
2、方法名相同,引數列表不同(引數順序、個數、型別)
3、方法返回值、訪問修飾符任意
封裝
封裝,將類的某些資訊隱藏在類的內部,不允許外部程式直接訪問,通過該類提供的方法來
實現對隱藏資訊的操作和訪問,隱藏物件的資訊,留出訪問的介面。
封裝的特點為:只能通過規定的方法訪問資料,隱藏類的例項細節,方便修改和實現
封裝的程式碼實現
1、修改屬性的可見性為private
private代表這個屬性只能在當前類內被訪問,實現了資訊的隱藏
2、建立getter/setter方法,設為public用於屬性的讀寫
對應開發的可操作介面,可在類外訪問private屬性
getter-取值,setter-賦值
多型
多型(多種形態),多型是面向物件程式設計的核心特徵,繼承和封裝都是為了實現多型而準備的。
在面向物件程式設計中,意味著允許不同類的物件,對同一個訊息做出不同的響應。
同樣是父類的引用,相同的方法,但是例項化物件型別不同執行的方法不同,這就算java中多型的表現
例如吃這種行為都是動物型別的引用,通過例項化物件的型別不同,如貓吃魚,鳥吃蟲,執行的行為能力也不一樣
向上轉型
1、向上轉型,把一個子類的物件轉型為一個父類的物件(隱式轉型、自動轉型)
2、父類引用指向子類例項,可以呼叫子類重寫父類的方法,以及父類派生的方法,無法呼叫子類特有的方法和屬性
3、小類轉型為大類
向下轉型
1、向下轉型、強制型別轉換
2、將子類的引用指向父類物件,此處必須進行強制轉換,可以呼叫子類特有的方法
3、必須滿足轉型條件才能進行轉換
Animal c=new Cat();
Cat temp=(Cat)c;
向上、向下轉型的作用
1、向上轉型多適用於有多個同父子類共同應用的場景,此時可以藉由父類引用,根據實際需要,轉型為特定的子類物件實現多型。
2、向下轉型一般是為了重新獲得因為向上轉型而丟失的子類特性而存在的,因此通常在向下轉型前需要先向上轉型。
向下轉型可以靈活的應用在多型的基礎上,同時兼顧子類的獨有性,相較於直接建立子類例項,提高了程式碼靈活性。