java物件導向--包及存取控制符,java物件導向

來源:互聯網
上載者:User

java物件導向--包及存取控制符,java物件導向

 

多人開發同一個項目時,會出現類名稱相同的情況。package就是為了避免類或介面名稱重複而採用的一種措施。實際上包就是有一定階層的檔案夾,*.class檔案要儲存當前類聲明的和包對應的檔案夾中。

包的定義格式:package 包名[.子包名];

編譯時間:javac –d . Hello.java                   -d選項為源檔案產生相應的目錄結構。

沒有給源檔案設包名時,java將這樣的檔案自動看作是隸屬於該目錄的預設包中。

父包和子包只是表示存在某種邏輯上的聯絡,在用法上不存在任何關係,如果父包中的類需要使用子包中的類,必須使用子包的全名,不能省略父包部分。

如果幾個類存放在不同的包中,調用構造器時需要使用類的全名。通過import關鍵字可以向某個java檔案中匯入指定包層次下的類,這樣就可以省略包首碼。同一個包內的類,不用import,可以直接存取。

import語句中的*號只能代表類,不能代表包。

java預設為所有源檔案匯入java.lang包下的所有類。如果有同名的類,還是要使用類的全名。

如果一個類中的方法全部是用static聲明的靜態方法,則在匯入的時候就可使用“import static”的方式進行匯入,調用的時候不使用“類.方法()”,直接調用靜態方法或訪問靜態屬性即可。

package com.servlet;     //包名全部用小寫import java.io.FileReader;  //匯入一個具體的類:import 包名+類名import static java.lang.Math.*; //匯入靜態屬性import java.util.*;  //java.util.sub.*子包下的類沒有匯入

封裝(Encapsulation)是物件導向的三大特徵之一,指的是將對象的狀態資訊和實現細節隱藏在對象內部,不允許外部程式直接存取對象內部資訊,而是通過該類所提供的方法來實現對內部資訊的操作和訪問。

類只有public 和default兩種訪問限定符。

每一個java原始碼檔案可以有多個類,但類和類平級,不能在類裡面套類。只能有一個public類,該類的名稱與檔案的名稱相同。原始碼檔案中的其他類為public類提供支援,在包之外不可見。 

類庫開發人員在修改類庫時,如何保證類庫使用者不需要修改代碼?

Java用3個關鍵字在類的內部設定邊界:public、private和protected。這些access specifier決定了緊跟其後被定義的東西可以在哪裡使用。

訪問限定符控制其後的成員(屬性或方法)在哪裡可以被訪問(被’.’),在哪裡不可以被訪問。若不遵守此規則,則編譯時間會出錯。

雖然類的執行個體對象會具有類中定義的全部成員,但執行個體對象並不是在哪都能直接存取自己的成員。取決於執行個體對象所在的class是否符合訪問限定符的要求。

類的成員有4中訪問限定符:

default:包存取權限,不使用任何修飾符,在同一包內的任何類都可訪問。

private:只能在當前類中(類型建立者和類型的內部方法)可以訪問。同一個包的其他類及子類都不能訪問。若要訪問,可以通過定義public get方法,在方法中擷取private屬性。在該類之外, public方法可以被.(訪問),private屬性不能。保留了更改底層實現的權利。

public:公有,對所有類(同包或不同包)都可見。

protected:繼承存取權限,對同一包內的類和所有子類(同包或不同包)都可見。

protected access requires a little more elaboration. Suppose class A declares a protected field x and is extended by a class B, which is defined in a different package (this last point is important). Class B inherits the protected field x, and its code can access that field in the current instance of B or in any other instances of B that the code can refer to. This does not mean, however, that the code of class B can start reading the protected fields of arbitrary instances of A! If an object is an instance of A but is not an instance of B, its fields are obviously not inherited by B, and the code of class B cannot read them.

【與基類不在同一個包中,在產生衍生類別時,衍生類別可以繼承基類的protected成員(subInstanc.x()),這個繼承的protected成員在衍生類別內部是可以訪問的(super.x()),但是在衍生類別內部無法直接存取基類執行個體對象的protected成員,也無法訪問兄弟類(繼承自同一個基類)的執行個體對象繼承的protected field(一種衍生類別內部只能訪問該種衍生類別的對象繼承的基類protected成員,不能訪問基類的其他衍生類別對象繼承的基類protected成員)。】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.