Discussion:
[問題]有關private屬性
(时间太久无法回复)
2007-07-20 10:05:21 UTC
Permalink
class test{

private int n = 7;

public static void main(String [] args)
{
test a = new test();
System.out.println(a.n);
}
}
我是JAVA新手.想要請教各位
為什麼 a.n 可以被列印出來.他不是屬於private的嗎...
還是說再同一個類別裡面 private 可以被使用,但是其他的類別無法使用
想請教各位高手 我這樣的說法是對的嗎?
煩請解答了

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.162.197.185
愚人
2007-07-20 11:03:37 UTC
Permalink
※ 引述《mixfuture (恩)》之銘言:
: class test{
: private int n = 7;
: public static void main(String [] args)
: {
: test a = new test();
: System.out.println(a.n);
: }
: }
: 我是JAVA新手.想要請教各位
: 為什麼 a.n 可以被列印出來.他不是屬於private的嗎...
: 還是說再同一個類別裡面 private 可以被使用,但是其他的類別無法使用
: 想請教各位高手 我這樣的說法是對的嗎?
: 煩請解答了


class test{ <== private start at here and born
private int n;

public void fooMethod(){
// in private realm XD
private int m; <-- born
}
// m out of scope --> die

} <== private end at here and die

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.219.202
※ 編輯: qrtt1 來自: 220.128.219.202 (07/20 19:02)
※ 編輯: qrtt1 來自: 220.128.219.202 (07/20 19:03)
Alien
2007-07-20 11:44:53 UTC
Permalink
※ 引述《mixfuture (恩)》之銘言:
: class test{
: private int n = 7;
: public static void main(String [] args)
: {
: test a = new test();
: System.out.println(a.n);
: }
: }
: 我是JAVA新手.想要請教各位
: 為什麼 a.n 可以被列印出來.他不是屬於private的嗎...
: 還是說再同一個類別裡面 private 可以被使用,但是其他的類別無法使用
: 想請教各位高手 我這樣的說法是對的嗎?
: 煩請解答了

你的 main() 是屬於 class test 底下的,
即是說是 class test 的 static method.
private 是可以被 "同一個 class" 存取
所以 class test 的 static method 可以
存取一個 class test 的 instance 的
private method.

alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
zaachi
2007-07-20 17:51:15 UTC
Permalink
我很想回答你

但是一篇文章可能打不完

基本上 Encapsulation 是用來規範 programmer

而不是規範 thread

所以你的程式碼就算加上 private

你自己也可以直接使用那個 field selection

別人雖沒有那樣的權限

但是可透過 setter 與 getter 的 thread 存取之

※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《mixfuture (恩)》之銘言:
: : class test{
: : private int n = 7;
: : public static void main(String [] args)
: : {
: : test a = new test();
: : System.out.println(a.n);
: : }
: : }
: : 我是JAVA新手.想要請教各位
: : 為什麼 a.n 可以被列印出來.他不是屬於private的嗎...
: : 還是說再同一個類別裡面 private 可以被使用,但是其他的類別無法使用
: : 想請教各位高手 我這樣的說法是對的嗎?
: : 煩請解答了
: 你的 main() 是屬於 class test 底下的,
: 即是說是 class test 的 static method.
: private 是可以被 "同一個 class" 存取
: 所以 class test 的 static method 可以
: 存取一個 class test 的 instance 的
: private members.
: alien

--
ptt部份使用者進化表
  廢宅--->暴民--->遊民(in reality)

 特色:
 沒有是非邏輯 很愛酸人,因為他們本身是個無能的廢物
 亂噓噓 課業很差,只能在網路中找到人生意義

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.132.132.7
小白退散!
2007-07-20 23:31:11 UTC
Permalink
這個寫法是合法的, 無論是 C++ / C# / JAVA 都是合法的.

所謂的可見度, 是針對 class level 而言, 而非 object/instance level 而言.

對 class A 來講, 他所有的 private member data 都可以被另一個 class A 的
Instance 存取.

也就是說, scope 的修飾詞只對不同的 class level 有意義.
原因很簡單, Complier 無法預測 runtime 的行為, 而 object / instance 是屬於
runtime 時期的產物.

※ 引述《***@ptt.cc (恩)》之銘言:
: class test{
: private int n = 7;
: public static void main(String [] args)
: {
: test a = new test();
: System.out.println(a.n);
: }
: }
: 我是JAVA新手.想要請教各位
: 為什麼 a.n 可以被列印出來.他不是屬於private的嗎...
: 還是說再同一個類別裡面 private 可以被使用,但是其他的類別無法使用
: 想請教各位高手 我這樣的說法是對的嗎?
: 煩請解答了
--
╭──── Origin:<不良牛牧場> bbs.badcow.com.tw (210.200.247.200)─────╮
│  ↘ Welcome to SimFarm BBS -- From : [220.138.47.203] │
╰◣◣◢ ◢◢《不良牛免費撥接→電話:40586000→帳號:zoo→密碼:zoo》 ◣◣◢ ─╯
Alien
2007-07-23 11:19:54 UTC
Permalink
※ 引述《***@bbs.badcow.com.tw (小白退散!)》之銘言:
: 這個寫法是合法的, 無論是 C++ / C# / JAVA 都是合法的.
: 所謂的可見度, 是針對 class level 而言, 而非 object/instance level 而言.
: 對 class A 來講, 他所有的 private member data 都可以被另一個 class A 的
: Instance 存取.
: 也就是說, scope 的修飾詞只對不同的 class level 有意義.
: 原因很簡單, Complier 無法預測 runtime 的行為, 而 object / instance 是屬於
: runtime 時期的產物.

object/instance 是 runtime 的產物也不代表
compiler 不能對其作出檢查吧?.

另, 說 accessibility 是 class level, Java 中有一個例外.
Java 中的 protected keyword 是針對個別 instance 的.
child class 的 instance 只能存取本身 instance 的 parent
class protected member,

e.g.

class Parent {
protected int parentInt;
}

class Child {
void foo() {
this.parentInt = 10; //valid
}

void bar(Child anotherChild) {
anotherChild.parentInt = 5; //ERROR
}
}

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
Alien
2007-07-23 11:23:42 UTC
Permalink
※ 引述《zaachi (zaachi)》之銘言:
: 我很想回答你
: 但是一篇文章可能打不完
: 基本上 Encapsulation 是用來規範 programmer
: 而不是規範 thread
: 所以你的程式碼就算加上 private
: 你自己也可以直接使用那個 field selection
: 別人雖沒有那樣的權限
: 但是可透過 setter 與 getter 的 thread 存取之

我不太明白你想表達的是什麼...
"你的程式碼就算... 你自己也可以直接..."
這兩句很明顯就不對了嗎?
還是你兩句中的 "你" 不是你前面提的 "programmer"

setter and geter 的 thread?
你確定你知道自己在說什麼嗎? ... o_oa

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26

Loading...