阿摩線上測驗 登入

申論題資訊

試卷:104年 - 104 關務特種考試_四等_資訊處理:程式語言概要#24070
科目:程式語言
年份:104年
排序:0

申論題內容

二、物件導向語言中,對宣告之實體(如屬性、方法)的可見性(visibility)有那三 種常見的限制?請用你熟悉的語言舉一個簡單的例子解釋這三種限制造成的不同 可見性。(20 分)

詳解 (共 3 筆)

詳解 提供者:AT
這題是指public、protected、private嗎?
詳解 提供者:windscales
public:公有,宣告類別中的變數、屬性或方法可供跟改與存取。private:私有,無法供其他類別存取與跟改。 protect:保護,只有繼承的子類別可使用與跟改。
詳解 提供者:hchungw
在物件導向語言中,對宣告的實體(如屬性、方法)的可見性有三種常見的限制:
Public(公有)
Protected(受保護)
Private(私有)
這些可見性限制決定了類的成員(屬性和方法)對於其他類和物件的可見性和訪問權限。
例子說明
以下是使用 Java 語言的一個簡單例子來說明這三種可見性限制:
java
複製程式碼
class Parent {
    // Public 成員
    public String publicField = "Public Field";
    // Protected 成員
    protected String protectedField = "Protected Field";
    // Private 成員
    private String privateField = "Private Field";
    // Public 方法
    public void publicMethod() {
        System.out.println("Public Method");
    }
    // Protected 方法
    protected void protectedMethod() {
        System.out.println("Protected Method");
    }
    // Private 方法
    private void privateMethod() {
        System.out.println("Private Method");
    }
    // 測試可見性的方法
    public void testVisibility() {
        // 在同一個類中可以訪問所有成員
        System.out.println(publicField);
        System.out.println(protectedField);
        System.out.println(privateField);
        publicMethod();
        protectedMethod();
        privateMethod();
    }
}
class Child extends Parent {
    public void testChildVisibility() {
        // 可以訪問 public 和 protected 成員,但不能訪問 private 成員
        System.out.println(publicField);
        System.out.println(protectedField);
        // System.out.println(privateField); // 這行會引發編譯錯誤
        publicMethod();
        protectedMethod();
        // privateMethod(); // 這行會引發編譯錯誤
    }
}
public class VisibilityExample {
    public static void main(String[] args) {
        Parent parent = new Parent();
        Child child = new Child();
        // 測試父類中的可見性
        parent.testVisibility();
        // 測試子類中的可見性
        child.testChildVisibility();
        // 測試外部對父類成員的訪問
        System.out.println(parent.publicField);
        // System.out.println(parent.protectedField); // 這行會引發編譯錯誤
        // System.out.println(parent.privateField); // 這行會引發編譯錯誤
        parent.publicMethod();
        // parent.protectedMethod(); // 這行會引發編譯錯誤
        // parent.privateMethod(); // 這行會引發編譯錯誤
    }
}
說明
Public:
可見性:在任何地方都可以訪問。
例子:
成員變數:public String publicField
成員方法:public void publicMethod()
訪問:
可以在類內、子類和外部類中訪問。
Protected:
可見性:在同一包內的類和任何子類中可以訪問。
例子:
成員變數:protected String protectedField
成員方法:protected void protectedMethod()
訪問:
可以在類內和子類中訪問,但在不同包的非子類中不能訪問。
Private:
可見性:只能在同一個類中訪問。
例子:
成員變數:private String privateField
成員方法:private void privateMethod()
訪問:
只能在類內訪問,不能在子類或外部類中訪問。
總結
Public 成員可以在任何地方訪問,包括外部類、同一包內的類和子類。
Protected 成員可以在同一包內的類和任何子類中訪問,但不能在不同包的非子類中訪問。
Private 成員只能在同一個類中訪問,不能在子類或外部類中訪問。
這些可見性限制提供了靈活的訪問控制機制,幫助我們在設計類時保護成員的訪問,從而提高程式的安全性和可維護性。