JAVA面向?qū)ο蟮娜筇匦?/h1>
    時間:2024-06-14 18:53:51 計算機等級 我要投稿
    • 相關(guān)推薦

    JAVA面向?qū)ο蟮娜筇匦?/p>

      每一對象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。Java程序是用類來組織的。下面是小編整理的關(guān)于JAVA面向?qū)ο蟮娜筇匦裕M蠹艺J(rèn)真閱讀!

      封裝性

      理解封裝性概念

      封裝是將代碼及其處理的數(shù)據(jù)綁定在一起的一種編程機制,該機制保證了程序(方法)和數(shù)據(jù)(屬性)都不受外部干擾且不被誤用。

      理解封裝性的一個方法就是把它想成一個黑匣子,它可以阻止在外部定義的代碼隨意訪問內(nèi)部代碼和數(shù)據(jù)。對黑匣子內(nèi)代碼和數(shù)據(jù)的訪問通過一個適當(dāng)定義的接口嚴(yán)格控制。

      如果想與現(xiàn)實生活中的某個事物作對比,可考慮汽車上的自動傳送。自動傳送中包含了有關(guān)引擎的數(shù)百比特的信息,例如你正在以什么樣的加速度前進(jìn),你行駛路面的坡度如何,以及目前的檔位。作為用戶,你影響這個復(fù)雜封裝的方法僅有一個:移動檔位傳動桿。例如,你不能通過使用拐彎信號或擋風(fēng)玻璃擦拭器影響傳動。所以檔位傳動桿是把你和傳動連接起來的惟一接口。此外,傳動對象內(nèi)的任何操作都不會影響到外部對象,例如,檔位傳動裝置不會打開車前燈!因為自動傳動被封裝起來了,所以任何一家汽車制造商都可以選擇一種適合自己的方式來實現(xiàn)它。然而,從司機的觀點來看,它們的用途都是一樣的。與此相同的觀點能被用于編程。封裝代碼的好處是每個人都知道怎么訪問它,但卻不必考慮它的內(nèi)部實現(xiàn)細(xì)節(jié),也不必害怕使用不當(dāng)會帶來負(fù)面影響。

      java封裝的對象

      Java封裝的基本單元是類。一個類定義了將被許多對象共享的屬性和行為方法。這個類的每個對象都包含這個類定義的行為和屬性,好像它們是從同一個類的模子中鑄造出來似的。因為這個原因,對象被看作是類的實例,可以說類是實例對象的模板。所以,類是一種邏輯結(jié)構(gòu),而對象是真正存在的物理實體。

      當(dāng)創(chuàng)建一個類時,你要指定組成這個類的屬性和方法。在用Java編寫的程序中,方法定義如何使用成員變量。這意味著一個類的行為和接口是通過方法來定義的,類的這些方法對它的實例數(shù)據(jù)進(jìn)行操作。

      訪問權(quán)限

      封裝:隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外公開接口。

      (1)private(私有變量):只能被定義它的類訪問。

      (2)protected(受保護變量):可以被定義它的類及子孫類直接訪問,也可以由同一包中的其他類直接訪問。

      (3)public(公共變量):可以被任何類進(jìn)行訪問。

      (4)package:可以被定義它的類和同一個包中的其他類(包括派生子類)所訪問.(包變量在聲明時常常省略package關(guān)鍵字),在其他包中的子類則不能訪問父類的包變量

      既然類的目的是封裝復(fù)雜性,在類的內(nèi)部就應(yīng)該有隱藏實現(xiàn)復(fù)雜性機制。類中的每個方法或變量都可以被標(biāo)記為私有(private)或公共(public)。類的公共接口代表類的外部用戶需要知道或可以知道的每件事情;私有方法和數(shù)據(jù)僅能被一個類的成員代碼所訪問,其他任何不是類的成員的代碼都不能訪問私有的方法或變量。既然類的私有成員僅能被程序中的其他部分通過該類的公共方法訪問,那么你就能保證不希望發(fā)生的事情就一定不會發(fā)生。

      繼承性

      理解繼承性概念

      繼承是一個對象獲得另一個對象的屬性的過程。

      繼承很重要,因為它支持了按層分類的概念。例如,尊貴的獵犬是狗類的一部分,狗又是哺乳動物類的一部分,哺乳動物類又是動物類的一部分。如果不使用層級的概念,我們就不得不分別定義每個動物的所有屬性。使用了繼承,一個對象就只需定義使它在所屬類中獨一無二的屬性即可,因為它可以從它的父類那兒繼承所有的通用屬性。所以,可以這樣說,正是繼承機制使一個對象成為一個更具通用類的一個特定實例成為可能。下面讓我們更具體地討論這個過程。

      一個深度繼承的子類繼承了類層級中它的每個祖先的所有屬性。繼承性與封裝性相互作用。如果一個給定的類封裝了一些屬性,那么它的任何子類將具有同樣的屬性,而且還添加了子類自己特有的屬性。新的子類繼承它的所有祖先的所有屬性。

      (1)復(fù)用其他對象的代碼有兩種方法:

      ①. 繼承:是由子對象完全繼承父對象的數(shù)據(jù)和操作,”is”的關(guān)系。

      ②. 包含:把一個對象作為另外一個對象的一部分,從而達(dá)到復(fù)用的目的,”has”的關(guān)系。

      (2)繼承的理解:

      ①. 繼承是類實現(xiàn)可重用性和可擴充性的關(guān)鍵特征,在繼承關(guān)系下類之間組成網(wǎng)狀的層次結(jié)構(gòu)。

      ②. 繼承避免公用代碼的重復(fù)開發(fā),減少代碼的冗余。

      ③. 通過繼承增強一致性,從而減少模塊間的接口和界面

      (3)單繼承(Java支持):

      子類只能有一個直接父類,多繼承(Java不支持):子類可以有多個直接父類。

      Java不支持類的多繼承,但支持接口的多繼承。繼承通過關(guān)鍵字extends實現(xiàn)。

      (4)變量隱藏:

      在子類對父類的繼承中,如果子類與父類的成員變量同名,此時成為子類隱藏(override)了父類的成員變量。子類若要引用父類的同名變量,要用super關(guān)鍵字做前綴加圓點操作符引用,即“super.變量名”。

      (5)方法覆蓋:

      在子類中重寫父類的方法,它們的名稱,參數(shù)以及返回類型完全相同。通過改寫方法體來完成不同的功能。注意子類方法不能縮小父類方法的訪問權(quán)限 。

      (6)super關(guān)鍵字:

      如果子類調(diào)用父類的構(gòu)造函數(shù),則通過super()調(diào)用來實現(xiàn)。如果子類調(diào)用父類的同名方法,則通過super.方法名()來實現(xiàn)。

      (7)this關(guān)鍵字:

      this變量代表對象本身當(dāng)類中有兩個同名變量,一個屬于類的成員變量,而另一個屬于某個特定的方法,使用this區(qū)分成員變量和局部變量,使用this簡化構(gòu)造函數(shù)的調(diào)用引用自身對象的成員變量,引用自身對象的成員方法,調(diào)用自身的構(gòu)造方法–this(參數(shù))

      public class Food {

      public String feel = "神清氣爽";

      public Food() {

      this.feel = feel;

      }

      public void eat() {

      System.out.println("食物補充營養(yǎng)");

      }

      }

      public class Rice extends Food {

      public String feel = "精神飽滿";

      public Rice() {

      super();

      System.out.println("this:" + this.feel);

      System.out.println("super:" + super.feel);

      super.eat();

      this.eat();

      }

      public void eat() {

      System.out.println("米飯補充碳水化合物");

      }

      public static void main(String[] args) {

      new Rice();

      }

      多態(tài)性

      多態(tài)性是允許一個接口被多個同類動作使用的特性,具體使用哪個動作與應(yīng)用場合有關(guān)。

      簡單的理解一下多態(tài),比如:

      ? 人這個類,封裝了很多人類共有的特性,

      ? 教師是人的子類,繼承了人的屬性與行為,當(dāng)然教師有自己的特征行為,比如教書授課;

      ? 學(xué)生是人的子類,繼承了人的屬性與行為,當(dāng)然學(xué)生有自己的特征行為,比如學(xué)習(xí)做作業(yè);

      基于抽象類說明多態(tài)性

      public abstract class Human {

      private int age;

      private double height;

      private int sex;

      public abstract void doThing();

      }

      public class Teacher extends Human {

      public void teach() {

      }

      public void doThing() {

      System.out.println("授課");

      }

      }

      public class Student extends Human {

      public void doThing() {

      System.out.println("做作業(yè)");

      }

      }

      public class App {

      public static void main(String[] args) {

      Teacher teacher = new Teacher();

      Student student = new Student();

      teacher.doThing();

      student.doThing();

      }

      }

      現(xiàn)在,當(dāng)我們需要去描述教師與學(xué)生各自的行為的時候, 我們可以分開來說“教師在授課”, “學(xué)生做作業(yè)”, 但如果我們要站在抽象的角度, 也就是從教師與學(xué)生的父類”人”的角度, 來同時描述他們各自的行為時,我們怎么描述?”人在授課”?”人在做作業(yè)”?這是不是怪怪的很不合適?不合適的問題就在于, 對于行為主體,我們使用了抽象層次的東東”人”,而對于行為本身, 我們卻使用了具體的東東”授課”與”教書”. 怎么解決呢? 那就需要解決抽象與具體的矛盾問題.

      既然是站在抽象在角度來描述,那我們把行為抽象一下,不就能同時描述了嗎?比如”人在做事”(教師授課與學(xué)生做作業(yè)都可以說成人在做事),這樣就解決了抽象層次與具體層次之間的矛盾.

      到了這一步, 我們可以把兩個描述: “教師在做事”,”學(xué)生在做事” ,兩者統(tǒng)一為”人在做事”,然后, 我們可以在”教師”的”做事”行為中去調(diào)用教師自己的特征行為”授課”在”學(xué)生”的”做事”行為中去調(diào)用學(xué)生自己的特征行為”做作業(yè)”, 所以,當(dāng)調(diào)用”人”去”做事”的時候,如果這個人是教師,那他所做的事實際上就是”教書”,如果這個人是學(xué)生,那他所做的事實際上就是”做作業(yè)”.也就是說在這里”人”是多態(tài)的, 在不同的形態(tài)時,特征行為是不一樣的, 這里的”人”, 同時有兩種形態(tài),一種是教師形態(tài),一種是學(xué)生形態(tài),所對應(yīng)的特征行為分別是”授課”與”做作業(yè)”.完成上述的描述過程, 其實就是多態(tài)機制的體現(xiàn).

      多態(tài), 就是站在抽象的層面上去實施一個統(tǒng)一的行為,到個體(具體)的層面上時, 這個統(tǒng)一的行為會因為個體(具體)的形態(tài)特征而實施自己的特征行為.

    【JAVA面向?qū)ο蟮娜筇匦浴肯嚓P(guān)文章:

    2016年java面向?qū)ο缶幊填}庫及答案03-19

    JAVA認(rèn)證開源技術(shù):關(guān)于Java的對象equals方法03-04

    PHP面向?qū)ο笾剌d重寫的不同04-03

    色彩的基本特性03-12

    項目管理特性03-18

    學(xué)習(xí)Java的技巧03-05

    java習(xí)題及答案03-26

    JAVA認(rèn)證簡介03-19

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      日韩欧美中文字幕一本 | 亚洲性日韩精品一区二区三区 | 亚洲一区精品在线视频 | 中文乱码精品视频在线 | 夜夜久久国產精品亚洲 | 色悠久久久久综合网伊人男男 |