黑马程序员技术交流社区

标题: 变量私有后是怎么实现类之间传递的? [打印本页]

作者: djx900    时间: 2012-3-20 23:04
标题: 变量私有后是怎么实现类之间传递的?
本帖最后由 djx900 于 2012-3-21 00:05 编辑

class Res
{
        private String name;      
        private String sex;
        private boolean flag = false;

        public synchronized void set(String name,String sex)
        {
                if(flag)
                        try{this.wait();}catch(Exception e){}
                this.name = name;
               
                this.sex = sex;
                flag = true;
                this.notify();
        }
        public synchronized void out()
        {
                if(!flag)
                        try{this.wait();}catch(Exception e){}
                System.out.println(name+"........"+sex);
                flag = false;
                this.notify();
        }
}

class Input implements Runnable

{
        private Res r ;                  
        Input(Res r)
        {
                this.r = r;
        }
        public void run()
        {
                int x = 0;
                while(true)
                {
                        if(x==0)                               
                                r.set("mike","man");                               
                        else       
                                r.set("丽丽","女女女女女");                               
                        x = (x+1)%2;
                }
        }
}

class Output implements Runnable
{
        private Res r ;        //这还有
       
        Output(Res r)
        {
                this.r = r;
        }
        public void run()
        {
                while(true)
                {
                        r.out();
                }
        }
}


class  InputOutputDemo2
{
        public static void main(String[] args)
        {
                Res r = new Res();

                new Thread(new Input(r)).start();
                new Thread(new Output(r)).start();
                /*
                Input in = new Input(r);
                Output out = new Output(r);

                Thread t1 = new Thread(in);
                Thread t2 = new Thread(out);

                t1.start();
                t2.start();
                */
        }
}


Res类中变量私有了 但是没有构造函数 ,外部类也能实例化  实例化之后变量也能访问了

        private Res r ;        //这还有
       
        Output(Res r)
        {
                this.r = r;
        }

这里的 构造函数接受了参数的  这里有点迷糊 请高手指点下

顺便讲下 对单例的类 是如何访问的
作者: 周建    时间: 2012-3-20 23:29
类Res的属性是私有的,但该类自己的方法可以访问, private Res r ;此处r代表一个Res类型的类变量,可以创建一个Res的实例对象,然后把对象的地址付给r;就可以通过引用对象r调用 Res中的方法,并访问Res的私有成员变量,

作者: 魏群    时间: 2012-3-20 23:50
class Output implements Runnable
{
        private Res r ;        //这还有
        
        Output(Res r)
        {
                this.r = r;
        }
        public void run()
        {
                while(true)
                {
                        r.out();
                }
        }
}
传进来的是对象的在堆中的地址,把这个地址赋给Output 类中的r。这就相当于在Output 类中有了一个
Res 类型的对象。这样就可以访问这个对象的变量和方法了。
访问时和正常的访问方式一样没什么区别,例如:如果你要访问的类里的成员变量被private修饰,那么那个类里边得有对外提供访问的public 类型 get变量名()的方法吧。
作者: OMG    时间: 2012-3-21 00:31
1,关于默认构造函数:不是没有构造函数,是有默认的构造函数,所以没有自定义构造函数的每个类也都能创建对象;
2,关于private修饰:因为创建了对象,所以也能访问,因为是本类对象自我访问;
3,关于对单例类的访问:单例设计模式,有构造函数,但被私有化,(外界对象无法建立给类对象),外界对象可以通过静态调用获取对象,拿到了对象,就可以通过对象访问该对象的所有属性和功能;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2