package dogBark;public class Dog {
String name;
public void bark(int i){
System.out.println(dogs[i].name+"  says Ruff!");
}
}
class DogText{
public static void main(String[] args) {
Dog d1 = new Dog();
//d1.name = "xiaobai";
//d1.bark();
d1.name = "xiaobai";
Dog[] dogs=new Dog[3];
dogs[0] = new Dog();
dogs[1] = new Dog();
dogs[0].name = "xiaohei";
dogs[1].name = "xiaohua";
dogs[2]=d1;
int i;
for(i=0;i<3;i++)
{
dogs[i].bark(i);
}


}
}比如我改成了这样   System.out.println(dogs[i].name+"  says Ruff!");  这句话,反而会报错了,是为什么呢。不能传递参数进去吗,还是。我是才学JAVA不久,很多基础不清楚

解决方案 »

  1.   

    dogs[0].name = "xiaohei";  ---->System.out.println(name+"  says Ruff!"); 
      

  2.   

    public void bark(){
    System.out.println(name+"  says Ruff!");
    }
    这是一个Dog累中的一个方法,当这个方法被调用的时候,就会打印出信息,
    好了,现在来看看是哪里调用的这个方法:
    dogs[0] = new Dog();
    dogs[1] = new Dog();
    dogs[0].name = "xiaohei";
    dogs[1].name = "xiaohua";
    dogs[2]=d1;
    int i;
    for(i=0;i<3;i++)
    {
    dogs[i].bark(i);
    }for循环中写得很明显嘛  在调用bark方法的时候,就已经指定了是dogs[i]在调用bark方法了..  楼主应该搞清楚, 面向对象编程中,类和实例的关系。。
    类是程序员对一类事物的抽象, 它表示一类有共性的事务,比如黄狗,花狗,都是狗, 但狗并不能代表某一只具体的狗
    实例就是具体的某一只狗了, 你可以通过类的new方法来创建一直具体的狗
      

  3.   

    那为什么直接 dogs[i].bark(i);  就会输出对应的dogs的名字呢,name并不是dogs[i].name的嘛。
      

  4.   

    另外Head First是一本设计模式的书, 楼主还是先学习一下JAVA基础,再来看这本书吧...
      

  5.   

    好吧,我想,我大概知道为什么不用指明dogs[i].name了。那还有个问题,我想问下,一个类的一个对象,可以调用同一个类的另外一个对象的属性和方法吗比如这里,dogs[1]使用,dogs[2]的属性或者方法
      

  6.   

    当然可以, 但前提是你要在dogs[1]中,获取到dogs[2]对象的引用,这个引用怎么获取,就要看你怎么处理了..