Topic: :~)我有一点搞不懂Java的private了,它到底有多安全

  Print this page

1.:~)我有一点搞不懂Java的private了,它到底有多安全 Copy to clipboard
Posted by: beyond1984
Posted on: 2005-09-21 14:22


//--------A.java file---------//
pubilc class A{
private String str;
public setStr(String str){
this.str = str;
}
public A( ){}
public A(A a){
str = a.str; //why can i use a.str??private member should be used in the
//obj itself rather than another obj!!But why.....
a.str = "fff";//It's dangerous! No protection at all
}
public void setStr(String str){
this.str = str;
}
public String getStr( ){
return str;
}
}

//--------B.java file--------//
public class B{
A a1 = new A( );
a1.setStr("Hello");
A a2 = new A(a1); //it's all right?!
System.out.println("a1 is " + a1.getStr());
System.out.println("a2 is " + a2.getStr());
}

//---------output ---------//
a1 is fff

a2 is Hello


2.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: beyond1984
Posted on: 2005-09-21 15:41

Post is deleted

3.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: beyond1984
Posted on: 2005-09-21 15:43

in c++,one obj can't access the private member of another obj, even they are the instance of same class.

who can explain it , thanks.

4.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: littledeer1974
Posted on: 2005-09-21 15:59

你在类中的定义的时候,即使是private,但是在自己的类里边当然能够看到
你写的[危险]的地方,我不明白哪里危险,对谁而言危险

5.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: littledeer1974] Copy to clipboard
Posted by: beyond1984
Posted on: 2005-09-21 16:52

你没有看见对象a2构造的时候用到a1,在构造的时候,居然可以修改a1的东西么,他们是共同的类,但不同的对象应该不能访问彼此的private成员啊。

6.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: panther
Posted on: 2005-09-21 18:48

你的意思是:在B类中定义的两个A类的对象,通过调用A类的PUBLIC方法,间接的获取了A类的PRIVATE变量的控制权.看上去A类的PRIVATE变量被另外的类访问了.

倒是没有违反规则,还是用A类的方法调用A类的变量.不过我想,要是说不安全.只能说这个类设计的不安全

7.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: menzy
Posted on: 2005-09-22 10:31

beyond1984 不是那个意思,他认为,如果类的属性申明为private,那么在构造对象的时候,构造方法/函数不应当直接修改该类其他对象的属性值。
其实如果从设计理念来考虑,这不是什么严重的违例。

8.Re::~)我有一点搞不懂Java的private了,它到底有多安全 [Re: beyond1984] Copy to clipboard
Posted by: hdwangyi
Posted on: 2005-09-24 09:43

这个特性类似于C++当中的友元,在Java中没有明确提出友元的概念,但在使用上却有一些友元的性质,比如在beyond1984的例子里,如果在一个类的内部声明自身的一个实例,那么该实例即为该类的友元,可以通过实例直接访问类中的私有成员。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923