複製鏈接
請複製以下鏈接發送給好友

Protected

(計算機術語)

鎖定
protected關鍵字(C++和C#)
具有protected訪問控制級別的成員是半公開的,外界無法直接訪問這個控制級別的成員,但是派生類的base指針(在c++中也可用引用訪問)可以獲得訪問能力。protected與private基本相似,只有在繼承時有較大的區別。繼承的類可以訪問protected成員,但是不能訪問private成員。
中文名
受保護的
外文名
Protected
作    用
保護類中的成員不受外界訪問

目錄

  1. 1 應用
  2. 1
  3. 2
  4. 3

Protected應用

Protected1

protected 表明被它修飾的成員變量為保護類型,可以被所在類的子類所訪問。protected修飾的變量和方法,允許在同一個類中訪問、同一個包中訪問、當前類的子類中訪問(僅限成員)。需要注意的是,不能在當前類的子類中通過父類的實例進行訪問。
示例
package a;
class A {
    protected int num = 1 ;
}
package b;
public class B extends A {
    public void fun(){
        new A().num;//不可以訪問 
    }
}
區分
(1)在java中有public、protected、private、package-private(無修飾符)四種訪問級別
(2) 在子類中的方法如果重載了父類的方法,那麼該方法的可見級別應更高或者相同,如父類中的方法是protected,那麼子類中方法可以是public或者protected,但不能是private。
(3) 在java中,一般來説,變量成員最好是private,對它們的訪問可以通過public的方法,在這些方法中可以做些控制以保證數據的一致性。這些方法名一般以get和set做為前綴。

Protected2

ActionScript 與protected 屬性
protected 是 ActionScript 3.0 中的新增屬性 (attribute),可使屬性 (property) 對所屬類或子類中的調用方可見。換句話説,protected 屬性在所屬類中可用,或者對繼承層次結構中該類下面的類可用。無論子類在同一包中還是在不同包中,這一點都適用。
如果熟悉 ActionScript 2.0,就會了解此功能類似於 ActionScript 2.0 中的 private 屬性。ActionScript 3.0 protected 屬性也類似於 Java 中的 protected 屬性,不同之處在於,Java 中的該屬性還允許對同一包中的調用方進行訪問。如果存在子類需要的變量或方法,但要對繼承鏈外部的代碼隱藏該變量或方法,此時 protected 屬性會很有用。

Protected3

C/C#/C++
關鍵字
以下是MSDN提供的C# 中protected關鍵字的參考資料。
protected 關鍵字是一個成員訪問修飾符。受保護成員在它的類中可訪問並且可由派生類訪問。有關 protected 與其他訪問修飾符的比較,請參見可訪問性級別。
僅當訪問通過派生類類型發生時,基類的受保護成員在派生類中才是可訪問的。例如,請看以下代碼段:
// protected_keyword.cs
using System;
class A
{
protected int x = 123;
}
class B : A
{
static void Main()
{
A a = new A();
B b = new B();
// Error CS1540, because x can only be accessed by
// classes derived from A.
// a.x = 10;
// OK, because this class derives from A.
b.x = 10;
}
}

語句 a.x =10 將生成錯誤,因為 A 不是從 B 派生的。
結構成員無法受保護,因為無法繼承結構。
示例
在此示例中,類 DerivedPoint 從 Point 派生;因此,可以從該派生類直接訪問基類的受保護成員。
// protected_keyword_2.cs
using System;
class Point
{
protected int x; protected int y;
}
class DerivedPoint: Point
{
static void Main()
{
DerivedPoint dp = new DerivedPoint();
// Direct access to protected members:
dp.x = 10; dp.y = 15;
Console.WriteLine("x = {0}, y = {1}", dp.x, dp.y);
}
}

輸出x = 10, y = 15