java - Java 中的对象命名和继承

标签 java variables object inheritance naming

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

动物.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...");
    }

}

狗.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 已创建!

一只狗吠叫

狗在 sleep ......

一只狗吠叫

狗在 sleep ......

菲多吠叫

所需输出:

一种新动物被创造出来了!

Fido 已创建!

一只狗吠叫

狗在 sleep ......

菲多吠叫

Fido sleep ...

问题:

我怎样才能给一只狗命名一次。所以我想在这段代码中命名 Fido ONCE。我也知道我可以说:Fido.speak("Fido"); 但这会扰乱数组。也显得不合逻辑。

为什么选择数组?

我还有其他几头牛、鸟等。我想要一个通用的打印输出,然后当我需要添加名称时为该对象设置一个名称。

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

------------------------------经过帕特里夏的提示-------------- ---------------

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!");
}

让动物有一个名称,然后在消息中使用该名称。

关于java - Java 中的对象命名和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30806211/

相关文章:

javascript - 在 JavaScript 中复制对象属性实际上是如何工作的?

java - Selenium Java - 如何外包 @Config 并从外部类调用测试?

java - 如何使用 Jackson 以自定义方式实例化 bean?

javascript - 在 Javascript 中将函数结果传递给另一个函数变量

javascript - jQuery 从列表中获取最大的数字

javascript - 在纯 Javascript 中从 Url 生成 Treeview

java - 我可以在以前版本的 Android 操作系统上使用 Android N 平台开发的应用程序吗

java - 编写一个程序来搜索数组以找到第一个奇数

python - 删除变量中的变量

java - 循环 AsyncTask 以获取 JSON 并将其作为对象存储在同一列表中