黑马程序员技术交流社区

标题: 引用传递的问题 [打印本页]

作者: 蒋昌宏    时间: 2012-2-16 19:07
标题: 引用传递的问题
class Person{
        private String person_name ;
        private int person_age;
        private Car car;
        private Person child ;
        public Person(String person_name,int person_age){
                this.person_name = person_name ;
                this.person_age = person_age ;
        }
        public void setChild(Person child){
                this.child = child ;
        }
        public Person getChild(){
                return child ;
        }
        public void setCar(Car car){
                this.car = car ;
                }
        public Car getCar(){
                return this.car ;
                }
        public void fun(Person temp){
                temp.person_name = "Jiangchanghong" ;
                temp.person_age = 23 ;
        }
        public String getPerson_name(){
                return this.person_name ;
        }
        public int getPerson_age(){
                return this.person_age ;
        }
}
class Car{
        private String car_name ;
        private String car_color;
        private Person person;
        public Car(String car_name,String car_color){
                this.car_name = car_name ;
                this.car_color = car_color ;
        }
        public void setPerson(Person person){
                this.person = person ;
                }
        public Person getPerson(){
                return this.person ;
                }
        public void fun(Car temp){
                temp.car_name = "Nissan" ;
                temp.car_color = "black" ;
        }
        public String getCar_name(){
                return this.car_name ;
        }
        public String getCar_color(){
                return this.car_color ;
        }       
}
public class function{
   public static void main(String args[]){
           Person person = new Person("123",123);
                           System.out.println(person.getPerson_name()+"、"+person.getPerson_age());
           Car car = new Car("456","456");
                           System.out.println(car.getCar_name()+"、"+car.getCar_color());
                          
                           System.out.println("我是分隔符---------------------------------");                          
                          
           person.fun(person);
                           System.out.println(person.getPerson_name()+"、"+person.getPerson_age());
           car.fun(car);
               System.out.println(car.getCar_name()+"、"+car.getCar_color());
           person.setCar(car);
                           System.out.println(person.getPerson_name()+"拥有"+person.getCar().getCar_name());
           car.setPerson(person);
                      System.out.println(car.getCar_name()+"属于"+car.getPerson().getPerson_name());
          
              System.out.println("我是分隔符---------------------------------");          
          
           Person child = new Person("Wuyilan",23) ;
                           System.out.println(person.getPerson_name()+"、"+person.getPerson_age());
           Car car_child = new Car("Beatles","White") ;
                           System.out.println(car.getCar_name()+"、"+car.getCar_color());
           person.setChild(child);
                           System.out.println(person.getChild().getPerson_name()+":"+person.getChild().getPerson_age());
           child.setCar(car);
                           System.out.println(child.getCar().getCar_name()+":"+child.getCar().getCar_color());
           child.setCar(car_child);
                           System.out.println(child.getCar().getCar_name()+":"+child.getCar().getCar_color());
           car.setPerson(child);
                   //        这里该怎么表示,运行结果报空指针System.out.println(car.getPerson().getChild().getPerson_name()+":"+car.getPerson().getChild().getPerson_age());
           car_child.setPerson(child);
                   //         这里该怎么表示,运行结果报空指针System.out.println(car_child.getPerson().getChild().getPerson_name()+":"+car_child.getPerson().getChild().getPerson_age());
           }
};
作者: 彭嘉聪    时间: 2012-2-16 19:13
为什么不用代码形式显示呢?看的怪头痛的。
作者: 丁晓宇    时间: 2012-2-16 19:26
1、Person和Car的关系是一对一,也就是说一个人只能有一辆车
2、Person中的fun()方法不明白是干什么的
楼主的代码太乱了...

楼主可以在Person类中用Set集合来表示car 这样一个人就可以同时拥有多辆车

作者: 陈丹阳    时间: 2012-2-16 19:34
因为car.setPerson(child);
所以car.getPerson().getChild() 这个为空,你没有定义child的child

下面的也是一样。你都没set child的child,怎么get child的child

// 不要觉得拗口 楼主的代码就是这样。。
作者: 蒋昌宏    时间: 2012-2-16 19:48
陈丹阳 发表于 2012-2-16 19:34
因为car.setPerson(child);
所以car.getPerson().getChild() 这个为空,你没有定义child的child

set child的child肯定不行啊,child用person的属性
作者: 陈丹阳    时间: 2012-2-16 19:58
蒋昌宏 发表于 2012-2-16 19:48
set child的child肯定不行啊,child用person的属性

car.setPerson(child);
car.getPerson()得到的是child

得到child  你再来一个.getChild怎么能行 返回的当然是默认的null啦。


作者: 蒋昌宏    时间: 2012-2-16 20:04
陈丹阳 发表于 2012-2-16 19:58
car.setPerson(child);
car.getPerson()得到的是child

           car.setPerson(person);
                           System.out.println(car.getPerson().getChild().getPerson_name()+":"+car.getPerson().getChild().getPerson_age());
           car_child.setPerson(person);
                      System.out.println(car_child.getPerson().getChild().getPerson_name()+":"+car_child.getPerson().getChild().getPerson_age());



明白了!你切中要点了,哈哈




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