关于Java初学者的问题

时间:2012-12-03 09:13:40

标签: java scjp

怎么打电话?怎么办?

public class Test {
        public static void main(String[] args) {
            Test test = new Test();
            Animal a = new Animal("Animal");
            Dog d = new Dog(" BigDog ","yellow");
            Cat c = new Cat(" SmallCat ","black");
            test.f(a); test.f(d); test.f(c); //(1)
        }

        public void f(Animal a) {
            System.out.println("name :"+ a.name);

            if(a instanceof Dog) {
                Dog dog = (Dog)a;
                System.out.println("    "+ fursColor + "fur"); //!(2)!Error
            }
            else if(a instanceof Cat) {
                Cat cat = (Cat)a;
                System.out.println("  " + eyesColor + "eye"); //(3)!Error
            }
        }
    }

提问:

(1)这是什么意思?

(2)如何打电话"黄色"?

(3)如何打电话"黑"?

2 个答案:

答案 0 :(得分:0)

For 1 _

这里有subtype多态性。 Youu正在传递Animal的子类

2_和3 _

您需要将某些内容传递给他的方法。您可以传入一个对象。例如

System.out.println(dog.getColour());

这假设您的对象中有getColour方法。你不提供Animal的定义,所以我只能假设这个

答案 1 :(得分:0)

  

(1)这是什么意思?

方法f正在使用instanceof,因为它不使用多态方法来选择正确的类型。

您能否更具体地了解您不理解的内容。

  

(2)如何称呼“黄色”?

我认为你想要的是String中的dog字段中的dog.fieldNameNotShownInYourExamplea.name"black"一样,以获取名称。

  

(3)如何称呼“黑人”?

我认为它应该是{{1}},但它与2)相同