跟我學java編程—理解Java語言的抽象與對象

2020-12-06 米粒教育

面向對象編程思想的一個基本方法就是抽象。抽象是從眾多的同類事物中抽取出具有共同特徵的過程及方法。

例如:蘋果、香蕉、葡萄等都屬於水果類別,假如我們要給水果找出共同特點,就需要抽取(抽象)蘋果、香蕉、葡萄的共同特徵,捨棄其不同的特徵。一般說來蘋果、香蕉、葡萄具有汁液多、糖分多、並且還含有揮發性芳香物質、可以生食等特點。具備上述特點的一般都可以歸類為水果。

圖 11-2 水果的共同特徵

抽象就是對同類事物的概括和歸納,前面例子的蘋果、香蕉、葡萄是現實中的事物,人們在品嘗的同時,抽取它們共有的特點,並起了一個新名稱水果,來概括和歸納具有蘋果、香蕉、葡萄共同特點的所有事物。例如:生梨、桃子也具備蘋果、香蕉、葡萄的共同特點,因此生梨和桃子也可以歸類為水果。

如果以面向對象的編程思想來看前面例子的話,水果可以稱之為類,而蘋果、香蕉、葡萄可以稱之為類的實例或對象。類是抽象出來的事物,現實生活中並不存在,例如水果,水果是人們賦予具有蘋果、香蕉、葡萄等共同特點的名稱,不單指某一事物;對象是指具體的實物或概念,例如蘋果、香蕉、葡萄等對象是實物,而一項政策可能就是一個概念性的對象了,在現實生活中,萬事萬物皆對象,面向對象編程就是模擬現實生活中的一個個對象來編程的。

現在生活中的許多對象都要進行分類,例如:人類、水果類、動物類、汽車類等。

分類的作用主要是為了便於管理和維護。面向對象的編程思想主要是通過模擬現實世界的各個對象來編程的,那麼這些現實世界中的對象是怎樣模擬或映射到計算機中的呢?這就要歸功與面向對象編程思想的基本方法——抽象。

抽象並不是Java語言中所特有的概念,在其它面向對象的語言中,如C++在構建對象時也需要抽象建模。例如:在學生信息管理系統中,需要將學生的共同特徵抽取出來,如學號、學分、性別等特徵,構建學生模型。提煉學生共同特徵的過程就是抽象建模。通過抽象,可以很容易地歸納出事物的共同特徵和行為,以便與其它對象區別開來,這樣抽取出來的特徵和行為在面向對象的編程中叫做屬性和方法。

屬性是指對象具有的各種特徵,學號、 學分、性別等特徵就是學生對象的屬性;行為一般用動詞描述對象的各種操作。

每個對象的屬性都有特定值,根據圖11-2可知,學生甲乙和學生丙丁的學號、學分、性別都不一樣。

圖 11-3 甲乙和丙丁學生的屬性

■ 知識點撥

事物抽象的過程也是一個裁剪的過程,事物不同的、非本質性的特徵被裁剪掉,留下共同特徵。但共同特徵也是相對的,例如,對於汽車和大米,從買賣的角度看都是商品,都有價格,是他們的共同的特徵,但從其應用方面來看是不同的。所以在抽象時,同與不同,決定於從什麼角度上來抽象,抽象的角度取決於分析問題的目的。

■ 思考與練習

家中都有電視機、冰箱、洗衣機等家用電器,請抽象出電視機、冰箱、洗衣機的共同特徵,作為家用電器類的屬性。

相關焦點

  • 跟我學java編程—認識java語言的字符類型
    Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。Java語言中,char佔2個字節的存儲空間,即可以存儲英文字符,也可以存儲單個漢字,一個漢字編碼也佔2個字節的存儲空間。char變量可按如下方式聲明:char code='a';任意單個字符,加單引號。
  • 跟我學java編程—Java邏輯運算符
    例如:假設一個數值取值範圍為0到100,設該數值為x,不等式0<x<100給出了x的取值範圍,在Java程序語言中,邏輯運算符可以實現類似數學中的不等式。下表列出了Java語言支持的邏輯運算符,表中假設布爾變量A為真,變量B為假。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    TIOBE程式語言指數排行榜,Java仍然排名前三位。TIOBE編程排行榜根據全球工程師、課程和搜尋引擎數量為指數得出,在一定程度上反映了程式語言的發展趨勢。其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 跟我學java編程—認識java的整數類型
    Java語言中,基本的整型數據類型有byte、short、int、long四種類型,用於需要不同存儲空間的數據使用。整型有正整數和負整數之分,在Java語言中,規定整型的最高位為符號位,最高位為「0」表示正數,最高位為「1」表示負數,其它位表示數值。因此整型類型的數據能夠表示的最小值為:-2n-1 —2n-1-1(n為該類型所佔存儲空間的二進位位數)。
  • 跟我學java編程—深入理解面向對象的繼承思想
    在面向對象中,繼承是對類而言的,新類可以繼承已有類的屬性和方法,這樣做的好處是新類可以復用原有類所有的代碼,復用的同時又可以定義新的方法和屬性來擴展原有類的功能。為了理解繼承思想,下面看一個案例。某出版機構準備要通過微信小程序實現產品在微信媒體的推廣和銷售,出版機構的產品包括圖書、音頻、視頻,圖書又分為紙書和電子書。
  • Java面向對象之final、abstract抽象、和變量生命周期
    其特點是:抽象類不能創建實例,也就是不能使用new創建一個抽象類對象,即使創建出抽象類對象,調用了抽象方法,也無法實現功能,因為抽象方法沒有方法體。構造方法不能都定義成私有的,否則不能有子類,因為子類構造器無法調用其構造器(創建子類對象前先調用父類構造方法)。抽象類不能使用final修飾,因為其必須有子類重寫其抽象方法,抽象方法才能得以實現。
  • 世界排行第一的程式語言:java迎來25歲生日
    作為全球排名第一的程式語言,本周末Java將迎來 25 歲生日。Java起源於 1991 年的「 Oak」項目,由James Gosling領導。面向對象的Java以其「一次編寫,隨處運行」的可移植性而聞名,因為Java虛擬機支持多種硬體平臺和作業系統以及Java applet可以從網頁上運行。
  • 跟我學java編程—深入理解for語句的嵌套循環
    示例1:用「*」輸出一個菱形圖案,圖案如下: 在D盤Java目錄下,新建「ForSample1.java」文件。用記事本打開「ForSample1.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示for嵌套循環的使用方法。
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    最近複習了深入理解Java虛擬機,做了一下總結,希望對大家有幫助,如果有不正確的地方,歡迎提出,感激不盡。 運行時創建對象 方法調用,執行引擎解釋為機器碼 CPU執行指令 多線程切換上下文 編譯 我們都知道,java代碼是運行在Java虛擬機上的。
  • 跟我學java編程—Java類的類型轉換和動態綁定
    1、類型轉換在前面的章節中,我們了解了父類和子類的關係,子類是對父類的擴展,父類是子類的抽象。也許同學們會有疑問,如果在程序中聲明了一個父類變量,該父類變量能不能指向其子類對象呢?或者聲明了一個子類變量,該子類變量能不能指向其父類對象呢?答案是肯定的。
  • 學習java的優勢是什麼?學習難度怎麼樣
    學習java成為了現在比較熱門的話題。Java是一種可以撰寫跨平臺應用軟體的面向對象的程序設計語言。  他容易學而且很好用,如果你學習過C++語言,你會覺得C++和Java很像,因為Java中許多基本語句的語法和C++一樣,像常用的循環語句,控制語句等和C++幾乎一樣,其實Java和C++是兩種完全不同的語言,Java只需理解一些基本的概念,就可以用它編寫出適合於各種情況的應用程式。同時截止到2018年8月,java領先其它語言幾乎4.5%。為世界第一程式語言。
  • 適合Java新手的開源項目集合——在 GitHub 學編程
    作者:HelloGitHub-老荀當今網際網路份額最大的程式語言是哪一個?是 Java!這兩年一直有聽說 Java 要不行了、在走下坡路了。沒錯,Java 的確在走下坡路,未來的事情的確不好說,但是瘦死的駱駝比馬大,未來的三五年之內,我相信 Java 仍然是行業「一哥」!
  • Java編程中基礎反射詳細解析
    類加載指的是將類的class文件讀入內存中,並為之創建一個 java.lang.Class對象,也就是說程序使用任何類的時候,都會為其創建一個class對象。被編譯後的Java文件.class也被JVM解析為一個對象,這個對象就是java.lang.Class。這樣當程序在運行時,每個java文件就最終變成了Class類對象的一個實例。我們通過Java的反射機制應用到這個實例,就可以去獲得甚至去添加改變這個類的屬性和動作,使得這個類成為一個動態的類。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    ,便會啟動JVM,將字節碼文件加載到JVM中,然後開始運行;當運行java命令時,該命令將會啟動一個JVM進程,在這個JVM進程中,會保存有該JVM創建的所有線程、變量、對象,這些線程、變量、對象會共享該JVM的內存區域。
  • Java面向對象之接口——interface
    如: Walkable.java以I開頭表示接口,如:IWalkable.java接口在編譯成功之後,和類一樣,也是.class的字節碼文件。可以這樣理解:接口是實現類的父類:實現類就是接口的子類。面向接口編程接口和實現類的多態關係是在開發中比較常見的多態體現接口 變量 = 創建實現類對象;//體現了多態思想接口中的方法是公共的抽象的,所以實現類必須覆蓋接口中的方法,並且方法必須使用public修飾,因為接口中的方法默認就是使用
  • Java8 lambda表達式
    匿名內部類是為了讓java程式設計師傳遞行為和傳遞數據一樣容易,不幸的是,他們並不容易,為了調用處理邏輯的代碼仍然有四行模板代碼,重複的模板代碼並不是唯一的問題,這種代碼也難以閱讀,我們並不想傳遞一個對象,而僅僅只需要傳遞某種行為,在java8中我們可以寫得更簡潔不同於傳遞一個實現某個接口的對象,我們傳遞了一段沒有命名函數的代碼
  • 深入分析java中的多態(從jvm角度分析)
    對於java中多態概念的理解一直是面試常問的問題,所以今天花了一些時間好好地整理了一下,力求從java虛擬機的角度來分析和理解多態。一、認識多態1、方法調用在Java中,方法調用有兩類,動態方法調用與靜態方法調用。
  • 跟我學java編程—面向對象編程多態概念的理解
    前面介紹了面向對象的繼承思想,繼承思想其核心是代碼的復用和程序功能高度的擴展性。繼承可以直接實現代碼的復用,功能的擴展性是指繼承後的類在父類的基礎上增加新的行為,或者對父類的行為進行擴展,實現同一個行為具有不同的實現代碼。
  • 用經典案例來幫助初學者解析Java的「多態」
    說到Java的「多態」特性,很多人都十分熟悉、了解;也有很多人仍然在理解或闡述時對此含糊不清。我這裡還是用我13年前給我們公司新員工做內部培訓時用到的看起來似乎有點老掉牙的、但是仍然十分經典的案例來重新給有需要的java愛好者呈現一下「多態」的奧秘所在!
  • 提升java編程性能優化知識 程式設計師必看這幾點
    對於學習java的學子也是如此,那麼java程式設計師如何提高編程性能呢,有哪些小知識或者技巧呢,怎麼樣才能在編程性能優化方面有所提升呢?  1.儘量在合適的場合使用單例  使用單例可以減輕加載的負擔,縮短加載的時間,提高加載的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面: