在 Java 和继承中命名一个对象

Name an Object in Java and Inheritance

我正在学习 Java 并且喜欢通过示例来学习。这是关于继承和变量的。

Animal.java

package inheritance; 
public class Animal {
    String name;

    public Animal (){
        System.out.println("A new animal has been created!");
    }

    public Animal (String name){
        System.out.println(name + " has been created!");
    }

    public void sleep() {
        System.out.println ("An animal sleeps...");
    }

    public void speak(){
        System.out.println("An animal *speaks*");
    }

    public void eat() {
        System.out.println ("An animal eats...");
    }

}

Dog.java

package inheritance;

public class Dog extends Animal {

    public Dog(){
        super();
    }

    public Dog(String name){
        super();
        System.out.println(name + " has been created!");
    }

    public void sleep(){
        System.out.println("A dog sleeps...");
    }

    public void speak(){
        System.out.println("A dog *barks*");
    }

    public void speak(String name){
        System.out.println(name + " *barks*");
    }

    public void eat() {
        System.out.println("A dog eats...");
    }

}

Zoo.java

package inheritance;

import java.util.ArrayList;
import java.util.List;

public class Zoo {

    public static void main(String[] args)
    {
        Dog ruffruff = new Dog();
        Dog Fido = new Dog("Fido");

        System.out.println();

        List<Animal> Animals = new ArrayList<Animal>();
        Animals.add(ruffruff);
        Animals.add(Fido);

        for (Animal AnAnimal:Animals) //for each structure.
        {
            AnAnimal.speak();
            AnAnimal.sleep();
        }
        Fido.speak("Fido");
    }
}

输出:

已创建新动物!

已创建新动物!

已创建 Fido!

一只狗吠叫

一只狗在睡觉...

一只狗吠叫

一只狗在睡觉...

菲多吠叫

期望输出:

已创建新动物!

已创建 Fido!

一只狗吠叫

一只狗在睡觉...

菲多吠叫

Fido 睡觉...

问题:

如何给狗取名 ONCE。所以我想在这段代码中命名 Fido ONCE。我也知道我可以说:Fido.speak("Fido"); 但这弄乱了数组。也显得不合逻辑。

为什么是数组?

我还有其他几个 Cow、Bird 等。我想要一个通用的打印输出,然后在我希望添加一个名称时为对象设置一个名称。

感谢您的阅读和您的宝贵时间! :)

----------------------------在帕特里夏的提示之后------------ ------------------

package inheritance;

public class Animal {
    protected String name = "";

    public Animal (){
        System.out.println("A new animal is born!");
    }

    public Animal (String name){
        this.name = name;
        System.out.println("A " + name + " is born!");
    }

    public void sleep() {
        if (name.isEmpty())
        {
            System.out.println("An animal sleeps...");
        }
        else
        {
        System.out.println ("A " + name + " sleeps...");
        }
    }

    public void speak() {
        if (name.isEmpty())
        {
            System.out.println("An animal speaks...");
        }
        else
        {
        System.out.println ("A " + name + " speaks...");
        }
    }

    public void eat() {
        if (name.isEmpty())
        {
            System.out.println("An animal eats...");
        }
        else
        {
        System.out.println ("A " + name + " eats...");
        }
    }
}

我会更换你的构造函数之一:

public Dog(String name){
    super();
    System.out.println(name + " has been created!");
}

public Dog(String name){
    super(name);
    System.out.println(name + " has been created!");
}

让Animal有一个名字,然后在消息中使用这个名字。