简体   繁体   English

用Java命名对象和继承

[英]Name an Object in Java and Inheritance

I am learning Java and like to do it through examples. 我正在学习Java,并且喜欢通过示例来实现。 This is about inheritance and variables. 这是关于继承和变量。

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

}

Dog.java 狗.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");
    }
}

Output: 输出:

A new animal has been created! 已经创建了一种新动物!

A new animal has been created! 已经创建了一种新动物!

Fido has been created! Fido已创建!

A dog barks 狗吠

A dog sleeps... 狗睡着了

A dog barks 狗吠

A dog sleeps... 狗睡着了

Fido barks 菲多树皮

Desired Output: 所需输出:

A new animal has been created! 已经创建了一种新动物!

Fido has been created! Fido已创建!

A dog barks 狗吠

A dog sleeps... 狗睡着了

Fido barks 菲多树皮

Fido sleeps... 菲多睡着了...

Questions: 问题:

How can I name a dog ONCE. 如何命名狗一次。 So I want to name Fido ONCE in this code. 因此,我想在此代码中将Fido ONCE命名为。 Also I know I can say: Fido.speak("Fido"); 我也知道我可以说:Fido.speak(“ Fido”); But that messes up the array. 但这弄乱了阵列。 Also seems illogical. 似乎也不合逻辑。

Why Array? 为什么要阵列?

I have several others Cow, Bird, etc. I want a generic print out and then a name set to the object when I desire a name to be added. 我还有其他几个Cow,Bird等。我想要普通打印,然后在想要添加名称时将名称设置为对象。

Thanks for reading and your time! 感谢您的阅读和您的宝贵时间! :) :)

------------------------------After Patricia's tips----------------------------- ------------------------------根据Patricia的提示----------------- ------------

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

I would change one of your constructors: 我将更改您的构造函数之一:

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

to

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

so that the Animal has a name, and then use the name in the message. 使动物具有名称,然后在消息中使用该名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM