[英]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.