1. 程式人生 > >面向物件基本定義及概念

面向物件基本定義及概念

面向物件的基本特徵
抽象:

抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。

繼承:

繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

封裝:

封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。

多型性:

多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,

Java的基本資料型別都有什麼?String是基本資料型別嗎?

基本資料型別包括intshortbytedoublebooleancharlongfloat

String不是基本資料型別,是引用資料型別。

基本資料型別和引用資料型別有什麼區別?

基本資料型別在被建立時,在棧上給其劃分一塊記憶體,將數值直接儲存在棧上;

引用資料型別在被建立時,首先要在棧上給其引用(控制代碼)分配一塊記憶體,而物件的具體資訊都儲存在堆記憶體上,然後由棧上面的引用指向堆中物件的地址。

int 和  Integer有什麼區別?

intjava的基本資料型別之一,而Integerjavaint提供的封裝類,它是引用型別

int型別作為成員變數時的預設值為0,而Integernull

記憶體分配的位置不同

final可以修飾什麼,不可以修飾什麼?為什麼?

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

將方法宣告為final,那就說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴充套件,並且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。

內部類要訪問區域性變數,區域性變數必須定義成final

型別

Final 不能修飾抽象方法,抽象類和介面,因為這些都是為了給其他類擴充套件和實現的,用final修飾這些就不能被擴充套件了

過載和重寫有什麼區別?

過載 overloading

過載是指在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數個數或者引數型別卻不相同。

重寫overriding

重寫是對父類的方法內容的重新定義,要求方法名和引數都相同,和父類方法寫的一模一樣也沒關係。在實現介面時必須重寫介面中的方法;抽象類中含有抽象方法時,繼承的類必須重寫其抽象方法。

類與類之間關係:

繼承,實現,依賴,關聯,聚合,組合

物件

物件是客觀存在的具體實體,具有明確定義的狀態和行為。(萬物皆物件)

類是具有相同屬性和行為的一組物件的集合

屬性

在類中表示物件或實體擁有的特性時稱為屬性 

方法

物件執行的操作稱為方法。

類與物件的關係

類是具有相同屬性和行為的一組物件的集合

類是概念模型,定義物件的所有特性和所需的操作

物件是實際的實體,物件是真實的模型,所有屬於同一個類的物件都具有相同的特性和操作

類是由物件抽象而來,物件是類的例項化

封裝

隱藏物件的屬性和實現細節,僅對外提供公共訪問方式

繼承的特點

Java使用的是單一繼承

繼承的雙方必須滿足 is-a 關係

具有層次結構

子類繼承了父類的屬性和方法

繼承的優點

程式碼的可重用性

父類的屬性和方法可用於子類

可以輕鬆地自定義子類

設計應用程式變得更加簡單

方法重寫

子類對父類中已經定義的方法進行重新實現叫方法重寫

當子類發現父類的方法實現不能滿足需要的時候,可以對這個方法進行重寫

方法重寫的要求:兩同兩小一大

方法名稱、引數列表相同

返回值型別、異常丟擲型別小 <=

訪問修飾符的可見性要比父類的方法要大 >=

構造器呼叫順序
構造器不能被繼承

子類構造過程必須先呼叫父類的構造器

要呼叫父類構造器,使用關鍵字 super

即使我們沒有顯示的去呼叫父類的構造器,系統也會預設在子類構造器的第一行自動呼叫父類的一個空引數的構造器。

關鍵字 super

呼叫父類構造器的語法為:

super()  或 super(引數列表) ;

super () 方法始終指向呼叫類的父類構造器

子類呼叫父類的構造器是,必須在子類構造器的第一行程式碼呼叫。

super.方法()  可以在子類中呼叫父類的構造器以外的其他方法。

Object

Java.lang.Object類是所有類的父類。

如果一個類的宣告沒有明確地指出繼承哪個類,則編譯器預設地認為該類繼承自Object

Object類的常用方法  toString()方法

toString方法將一個物件轉換為String

如果我們需要輸出各種有用的資訊就必須覆蓋toString方法。

當發生自動的字串轉換時,編譯器會呼叫這個方法。

例如System.out.println()呼叫:

Employee emp = new Employee();

System.out.println(emp);

等同於

Employee emp = new Employee();

System.out.println(emp.toString());

多型

多型性是指“多種形式”

它使用不同的例項而執行不同操作

造型和虛方法呼叫

這個是多型的一個應用,將父類的引用指向子類的物件。語法應該是定義一個父類的引用,然後建立一個子類的物件,然後將父類的引用指向新建立的子類物件。

在多型的情況下,宣告為父類型別的引用變數只能呼叫父類中的方法,而子類物件中覆蓋了父類的方法,這時父類物件呼叫的是子類中的方法,這種機制就是虛方法呼叫。

instanceof運算子

需要確切知道到底構建的是什麼物件可以使用instanceof運算子。

包裝類

Java不將基本資料型別視作物件,也就是說基本資料型別不會被視為物件處理,它只是一個值,但是有些時候我們需要使用物件操作,所以就要使用到Java的包裝類,包裝類與基本型別一一對應。

裝箱和拆箱

基本資料型別轉換成引用資料型別的過程稱為裝箱

從引用型別資料轉換成基本資料型別的過程稱為拆箱

這種功能很有用,您可能會經常遇到基本型別資料和引用型別資料的互相轉換。

列舉

列舉是用一組有限的符號名稱來表示一些屬性值,例如一年就四個季節,我們只要定義四個常量就行了。

Java SE 5.0開始,定義列舉類使用關鍵字enum,其基本語法如下面一個例子所示:

public enum Season{

SPRING, SUMMER, FALL, WINTER

}

static 修飾符

static修飾符修飾的方法叫靜態方法

使該方法獨立於類的例項,可以直接使用類名去訪問,而不僅僅是類例項,所以也叫類方法

static修飾符修飾的屬性叫靜態屬性

使該屬性獨立於類的例項,可以直接使用類名去訪問,而不是類例項,所以也叫類屬性

static修飾符修飾的程式碼塊叫靜態程式碼塊

使該程式碼塊獨立於類的例項,可以先於類的載入而載入

靜態匯入

JavaSE 5.0開始,import語句不僅可以匯入類,還可以匯入靜態方法和靜態屬性

import  static  java.lang.Math.PI;

public class StaticImport {

public static void main(String[] args) {

System.out.println(PI);

}

}

final 修飾符

修飾變數,變數不能修改

修飾方法,子類不能重寫方法

修飾類,不能有子類

abstract 修飾符

abstract修飾的方法叫抽象方法

抽象方法必須宣告在抽象類中

抽象方法語法:

abstract   type method_name(parameter_list);

abstract修飾的類叫抽象類

宣告抽象類語法:

    abstract class{…… }

父類中的某些抽象不包含任何邏輯,並需要在子類中重寫,子類提供這種抽象方法的實現細節。

Abstract 修飾符規則

抽象類不能被例項化

抽象類的非抽象子類必須實現父類的所有抽象方法

構造器和static方法不能是抽象的

子類中實現的抽象方法的訪問範圍必須大於或等於父類的訪問範圍

介面

介面就是某個事物對外提供的一些功能的申明 

可以利用介面實現多型,同時介面也彌補了Java單一繼承的弱點

使用interface關鍵字定義介面

      介面中的方法只能是宣告,不能是具體的實現,也就是所介面中的方法只能是抽象方法。

介面中的變數只能是 static final修飾的常量。

實現介面

使用關鍵字 implements 實現介面,

如:class demo implements myinterface

如果有一個以上介面被實現,則用逗號隔開介面名稱。

如: class demo implements Mycalc, Mycount{.}

如果一個非抽象類實現了介面,那麼它必須實現該介面中的所有方法

介面繼承

介面是可以多重繼承的,一個介面可以繼承多個介面使用exetends關鍵字表示繼承,多個介面之間使用逗號“,”隔開。

介面和抽象類的區別

從程式設計的角度來看,兩者相同的地方是都不能被例項化,都包含抽象方法。

介面主要描述類有什麼功能,是一組對類的需求描述;而抽象類主要是講這個類究竟是個什麼東西,本質上還是一個類。

一個介面繼承自多個介面,同一個類可以實現多個介面;然而抽象類畢竟是一個類,一個類只能單繼承一個類,如果這個類繼承了一個抽象類,它將不能繼承其他類。

介面只能包含抽象方法,並且這些方法都是public 的,介面只能包含常量並且這些成員都是public的,介面不能包含其他成員例如構造器;

抽象類除了定義抽象方法以外,還可以在抽象類內定義屬性、構造器和普通方法(有方法體和具體實現邏輯的方法)。

1. 方法過載和重寫的異同點是什麼?

在同一個類中有多個方法名稱相同,引數列表不同,稱為方法過載

在繼承時,子類可以對父類的方法進行重寫,被重寫的方法要求方法名和引數列表完全相同,返回值和宣告丟擲的異常型別應該能自動轉換為父類方法中對應的型別,訪問修飾符訪問範圍不能比父類方法小

2. ==和 equals 的區別是什麼?

==用於比較兩個變數中儲存儲存值是否相等

Equals用於比較兩個物件的的內容是否相等

3. java 程式在什麼情況下呼叫 toString 方法?

要獲取物件資訊時可以呼叫toString()方法

4. 簡述面向物件的特性?

面向物件的特徵有:

封裝:隱藏屬性和方法實現的細節,公開介面。Java通過類、包、訪問修飾符實現封裝

繼承:通過繼承,子類可以直接使用父類中宣告的非私有的方法和屬性,便於類的設計

多型:父類的引用可以指向子類的物件,但當呼叫方法時如果這個方法被子類重寫過,會呼叫子類的實現

5. int 和 Integer 的區別?

Int是基本型別

Integer是引用型別,它是int的包裝型別,裡面包裝一個int型別的值,可以提供方法

6.  訪問修飾符的作用域是什麼?

private:當前類

default:當前類、當前包

protected:當前類、當前包、子類

7.  深複製和淺複製分別是什麼?

在物件克隆時,對於引用型別屬性,只是值複製,則是淺複製,若是也對引用物件進行復制,則是深複製

8. java 中是否有引用傳遞?為什麼?

沒有,java在方法呼叫時,只是將實參的值賦值給形參。

相關推薦

面向物件基本定義概念

面向物件的基本特徵 抽象: 抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。 繼承: 繼承是一種聯結類的層次模型,並且允許

Java面向物件——類定義使用

先看看一個簡單例子: package Hello; /** * 類名必須與檔名一致 * @author Huke * */ public class Person { String nam

面向物件基本概念舉例理解

物件抽象 真實世界的物件有成千上萬個屬性,是不是把它們通通搬進計算機世界裡來呢?回答顯然是不行的,分析人員往往把那些只對用計算機管理業務所必須的物件屬性對映到計算機裡,而忽略那些無助於處理業務的無用資訊。這個過程叫作物件抽象。 封裝 封裝是把物件的屬性

Java 面向物件基本概念

我自己根據我的經驗,自己歸檔總結了下, 所謂面向物件,就是 以基於物件的思維去分析和解決問題,萬物皆物件;   面向物件經常和麵向過程放一起討論;   這裡舉例, 比如要造一輛自行車,假如以面向過程的思維搞,張三先搞輪子, 李四再搞車架,王五再搞鏈條,趙六再搞腳踏板...最終

python面向物件基本概念

過程和函式: 過程 是早期的一個程式設計概念 過程 類似於函式,只能執行,但是沒有返回值 函式 不僅能執行,還可以返回結果 面相過程 和 面相物件 基本概念: 1)面向過程: a. 注重 步驟與過程,不注重職責分工 b.如果需

-1-2 java 面向物件基本概念 封裝繼承多型 變數 this super static 靜態變數 匿名物件 值傳遞 初始化過程 程式碼塊 final關鍵字 抽象類 介面 區別 多型 包 訪問許可權 內部類 匿名內部類 == 與 equal

java是純粹的面向物件的語言 也就是萬事萬物皆是物件 程式是物件的集合,他們通過傳送訊息來相互通訊 每個物件都有自己的由其他的物件所構建的儲存,也就是物件可以包含物件 每個物件都有它的型別  也就是類 某一特定型別的所有物件都可以接收相同的訊息,因為同一類事物有共同的特性 面向物件開發 •

面向物件程式設計_類和物件定義使用_單選題

設A為自定義類,現有普通函式int fun(A& x)。則在該函式被呼叫時(D): (2分) 將執行復制建構函式來初始化形參x僅在實參為常量時,才會執行復制建構函式以初始化形參x無需初始化形參x僅在該函式為A類的友元函式時,無需初始化形參x

JAVA面向物件程式設計基礎複習(一)面向物件基本概念

從今天開始有計劃的寫一些博文。內容主要涉及JAVA語言、面向物件程式設計、設計模式、android開發(這才是重點嘛)。今天開始寫 JAVA面向物件程式設計基礎複習這個系列的文章。 JAVA面向物件程式設計基礎複習目錄      (二)異常處理與自定義異常      (

泛型的基本定義使用

turn test 出現 span color nts extend 參數類型 子類                                     泛型 1、 基本概念: 範例: class Point<T>{//T的類型未知 T x; T y; P

03.面向物件:類類的封裝——public和private

面向物件:把構成問題的事物,按照一定規則劃分為多個獨立的物件,然後通過呼叫物件的方法來解決問題。——《Java基礎案例教程》 面向物件的特點: 封裝:封裝屬性和行為 繼承:無需在重新編寫原有類的情況下,對原有類的功能進行擴充套件——增強程式碼複用,提高開發效率 多型:允許重

面向物件基本思想概述

面向物件的基本思想   面向物件是一種新興的程式設計方法,或者是一種新的程式設計規範(paradigm),其基本思想是使用物件、類、繼承、封裝、訊息等基本概念來進行程式設計。從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,並且在系統構造中儘可能運用人類的自然思維方式。開發一個軟體是為

串:串的基本定義簡單應用魔王語言

串 串,於我的理解就是字串 一般認為有三種儲存方式:定長順序串,堆串,塊鏈串(個人認為比較雞肋)。定長順序串類似於普通字串,同陣列的大小一樣最長長度固定。堆串儲存在堆中,空間大小可重新分配。塊鏈串類似於連結串列,是極端節省空間的堆串。 定長順序串與堆串應用較多,定長順序串的一些操作存

面向物件的程式設計C++概述

1.面向過程的程式設計: (1)資料與對資料處理的過程相分離,其弊端表現在:一旦資料結構改變,與之相關的所有操作都必須改動 ,程式碼修改量大。  2.面向過程的程式設計的範型是:  (1)程式=演算法+資料結構。  (2)資料與對資料操作的分離導致軟體維

面向物件——普通方法構造方法帶參方法和方法過載

普通方法   類的方法是為了完成某個特定的應用程式功能存在的,我們要實現程式的某些功能的時候,一般都是某些類的功能,比如上一篇中的學生類,有一個展示學生資訊的方法,我們就可以把它放到學生類裡面(因為只要是學生,他就都有這個展示資訊的功能),而方法是有返回值的,也可以沒有返回值,返回型別為void。有返回值的

C++基礎教程面向物件學習筆記心得感悟[圖]

C++基礎教程面向物件學習筆記及心得感悟[圖] 使用友元函式過載算術運算子: C ++中一些最常用的運算子是算術運算子 - 即加號運算子(+),減運算子( - ),乘法運算子(*)和除法運算子(/)。請注意,所有算術運算子都是二元運算子 - 這意味著它們需要兩個運算元 - 運算子的每一側都有一個運算

Java面向物件(OOP)概念

Java 面向物件 OOPs(面向物件程式設計系統) 物件 類 繼承 多型性 抽象 封裝 面向物件程式語言和基於物件的程式語言有什麼區別? 始祖:simula第一種面嚮物件語言。 始

Spring的基本配置概念

                                     Spring      概念:開源的框架 一站式的 貫穿表現層業務層持久層 可以無縫的結合他們        核心思想 控制反轉(IOC) 面向切面(AOP)       是一個超級大工廠 (幫助我們例項化類的 不需要我們自己new 只

java面向物件基本知識點

面向物件的思想 當需求單一,或者簡單時,我們一步一步去操作沒問題,並且效率也挺高,可隨著需求的更改,功能的增多,發現需要面對每一個步驟很麻煩了。這時就開始思索,能不能把這些步驟和功能在進行封裝,封裝時根據不同的功能,進行不同的封裝,功能類似的封裝在一起。這樣結構就清晰了很多。用的時候,找

monkey的基本定義基本使用(菜鳥學習中)

一.monkey的定義  1.(轉自 https://blog.csdn.net/beyond_f/article/details/78543070 )    Monkey程式由Android系統自帶,使用Java語言寫成,在Android檔案系統中的

07-Python面向物件-基本理論

學習地址: 撩課-Python大資料+人工智慧1 撩課-Python大資料+人工智慧2 撩課-Python大資料+人工智慧3 撩課-Python大資料+人工智慧4 撩課-Python大資料+人工智慧5 撩課-Python大資料+人工智慧6 撩課-Python-GUI程式設計-PyQt5