在物件導向語言中,對宣告的實體(如屬性、方法)的可見性有三種常見的限制:
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 成員只能在同一個類中訪問,不能在子類或外部類中訪問。
這些可見性限制提供了靈活的訪問控制機制,幫助我們在設計類時保護成員的訪問,從而提高程式的安全性和可維護性。