Object Oriented Programming Language Exam Questions
物件導向程式語言考題
舉例說明存取修飾子(物件導向語言的可見性)
舉例說明存取修飾子(物件導向語言的可見性)
物件導向語言中,對宣告之實體(如屬性、方法)的可見性(visibility)有那三種常見的限制?請用你熟悉的語言舉一個簡單的例子解釋這三種限制造成的不同可見性。(20 分
答案
(一)參考什麼是類別圖中的存取修飾子
public 存取識別子,在程式中的所有類別皆可存取
private 存取識別子,同一類別才可以存取
protect 存取識別子,只有繼承的子類別才可以存取
(二)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Public class Animal { | |
Private string sound=""://只有此類別可存取此變數成員 | |
Protect void sleep (){ | |
System.out.println("I am sleeping"); | |
} | |
Public void makeSound (){ | |
System.out.println(sound); | |
} | |
Public Animal (string sound){ | |
Sound=sound; | |
} | |
} | |
Public class Cat extends Animal { | |
Public Cat(string sound){ | |
super(sound); | |
sleep();//可存取父類別定義的sleep 函式 | |
} | |
} | |
Public class Main{ | |
Public static void main(string [] args){ | |
Cat c=new Cat("meow"); | |
c.makeSound ();//存取類別Animal 中定義的公開函式 | |
} | |
} |
在這個例子中,我們有一個 `Animal` 類別,具有三種不同的屬性和方法,每一個都使用不同的可見性限制。這是如何影響可見性:
- `sound` 是一個私有屬性,只能在 `Animal` 類別內部訪問,外部程式碼無法直接訪問。
- `sleep()` 是一個受保護方法,可以在 `Animal` 類別及其子類別中訪問,但不能在不相關的類別中訪問。
- `makeSound()` 是一個公共方法,可以在任何地方訪問,無論是在 `Animal` 類別內部還是外部程式碼中。
這三種可見性限制確保了不同程度的存取控制,以維護程式碼的安全性和封裝性。
第二次回答
下列程式碼為java程式語言
1.public 存取識別子例子
class Animal{
public string name="tom";
}
public class Main{
public static void main(string[] args){
Animal a=new Animal();
a.name="brian";
}
}
在類別Animal中宣告為name為公開成員,在類別Main中可以透過新建立的物件a,直接存取name成員。
2. private 存取修式子
class Animal{
private string name="tom";
pubilc void setName(string name){
this.name=name;
}
}
public class Main{
public static void main(string[] args){
Animal a=new Animal();
a.setName("brian");
}
}
在類別Animal中宣告為name為私有成員,並新增一個公開函式成員setName,用來設定name成員。在類別Main中不可以透過新建立的物件a,直接存取name私有成員。需透過公開函式成員setName,來設定name私有成員。
3. protect存取修式子
class Animal{
protect string name="tom";
}
class Cat extends Animal{
Cat(string name){
this.name=name;
}
public void printName(){
System.out.println(name);
}
}
public class Main{
public static void main(string[] args){
Cat a=new Cat("brian");
a.printName();
}
}
在類別Animal中宣告為name為保護成員,
類別Cat為繼承自類別Animal之子類別,其建構子接受name為參數,並設定宣告在父類別AniamL的保護成員name為name參數的值。
Comments
Post a Comment